c++临时对象的来源即成本
2017-08-04 10:29
232 查看
程序员往往把临时需要的变量称为 “临时变量”。如:
template<class T>
void swap(T& object1,T& object2)
{
T temp=object1;
object1=object2;
object2=temp;
}
temp 即临时对象,但是,在c++眼中,temp并不是临时对象,是一个局部对象。
c++临时对象是不可见的,一般临时对象会在下面两种情况下产生:
1.函数返回对象时
例如:
const Number operator+ (Number& object1,Number& object2){...}
这个函数会返回一个临时对象。记录两个对象的加法。使用const的原因是防止有(a+b)=c这种情况出现。
2.隐式类型转换转换发生时。
int fun(const string& str,char ch);//返回字符串中ch的个数。
char buffer[MAX];char c;
fun(buffer,c){...}
这时,buffer是char类型的数组,将buffer传递给fun函数,编译器会隐式类型转换将buffer转换为一个string的临时对象。
避免的方法,显式禁止它。
临时对象的成本:
构造跟析构需要时间,影响效率。
template<class T>
void swap(T& object1,T& object2)
{
T temp=object1;
object1=object2;
object2=temp;
}
temp 即临时对象,但是,在c++眼中,temp并不是临时对象,是一个局部对象。
c++临时对象是不可见的,一般临时对象会在下面两种情况下产生:
1.函数返回对象时
例如:
const Number operator+ (Number& object1,Number& object2){...}
这个函数会返回一个临时对象。记录两个对象的加法。使用const的原因是防止有(a+b)=c这种情况出现。
2.隐式类型转换转换发生时。
int fun(const string& str,char ch);//返回字符串中ch的个数。
char buffer[MAX];char c;
fun(buffer,c){...}
这时,buffer是char类型的数组,将buffer传递给fun函数,编译器会隐式类型转换将buffer转换为一个string的临时对象。
避免的方法,显式禁止它。
临时对象的成本:
构造跟析构需要时间,影响效率。
相关文章推荐
- More Effective C++(条款19:了解临时对象的来源)
- c++ 临时对象的来源
- More Effective C++ ——019_理解临时对象的来源
- [More Effective C++]条款十九:理解临时对象的来源
- 理解临时对象的来源(More Effective C++_19(效率))
- More Effective C++----(19)理解临时对象的来源
- [More Effective C++]条款十九:理解临时对象的来源
- More Effective C++ 条款19 了解临时对象的来源
- C++中看不见的临时对象
- 条款19 了解临时对象的来源
- C++中的临时对象 zz
- C++中的临时对象都是const类型
- 浅析C++临时对象的产生相关问题
- 笔记--c++临时对象与const
- 关于c++临时对象产生的规则
- c++临时对象及其产生条件
- 理解临时对象的来源
- 浅析C++临时对象的产生相关问题
- C++调用函数是如何返回临时对象的
- C++ 临时对象