0. 局部变量 vs 临时变量 void swap (int&a, int &b) { int tmp=a; a=b; b=tmp; } 上面这段程序里的tmp变量实际上是局部变量而不是临时变量。临时变量有两个特征:1.invisiable,在程序代码中没有显式出现 2 没有名字 non-named。 出现临时变量/对象的场合 1.函数的返回值 2. 参数传递 2,1 值传递 by -value 2.2 采用 const-reference时,且需要转换时,例如 double d; const int &ref=d; 实际上,编译器作了一次变化 int tmp=d; const int & ref=tmp; 3. ++ --的后置运算符。它们总是生成一个临时对象tmp=原对象,对原对象进行操作。但返回tmp 4. 对象间的隐式转换,例如 string str; str=“abc”;
当参数为非常数引用 reference to non-const时,则不会产生临时变量。
|