1. 局部变量
下面这样写是可以的,返回时复制了一份
int gg(int a, int b){
int x = a+b;
return x;
}
下面这样写是不可以的,因为返回值是局部变量,在方法结束时就销毁了。而返回该值的引用就会出现错误,编译都通不过的。
int& gg(int a, int b){
int x = a+b;
return x;
}
2. 静态成员函数
这里的静态返回值不属于任何对象,因为他是静态的,他是属于这个类,调用时F::bb()要这样写。注意,静态成员函数不可以用 this。
class F{
public:
F(){}
static int bb(){return 0;}
}
静态成员初始化在类的外面
Class A{
static int a;
A(){}
}
int A::a = 0;
int main(){
A aa;
return 0;
}
3. 匿名对象(临时对象)
引用常量或者临时值时必须有 const,见下面两个写法。因为返回的f_t为临时变量,如果有 f1+f2+f3 的运算,其实际的逻辑是f1+f2的结果临时值再参与计算的,即
f1 + f2 = f_t1;
f_t1 + f3 = f_t2;
而临时值是不能被修改的,所以当调用 f_t1+f3 时就会报错,因此必须加const。
写法1
F operator << (F f1, F f2 ){
F f_t = f1+f2;
return f_t;
}
写法2
F operator << (const F f1,const F f2 ){
F f_t = f1+f2;
return f_t;
}
编译器可以对匿名对象进行优化,减少其复制等损耗。
可以用创建临时对象来初始化对象。
F operator << (const F f1,const F f2 ){
return F (f1+f2);//临时对象也是对象,有输出会打印在屏幕上
}
Teacher t = Teacher(name, age);