String& String::operator =(const String &str){
int length=strlen(str.m_data);
delete [] m_data;
m_data= new char[length+1];
strcpy(m_data,str.m_data);
return *this;//返回本对象的引用
}
当我把&去掉之后 有什么变化吗?
我看到的例子说在对符号进行重载的时候必须以应用的形式返回,你会发现很多库函数都是这么返回的。如果你要把&去掉,那么也把“return *this;”的“*”去掉,再用debug单步调试,查看想内存中的数据或者看看有没有错就知道了。如果这是重载规定的标准写法,那就时能问设计编译器的人了,因为像这样的东西,往往只是个标准,而不是个规律,这样就只能这么写咯。
我觉得这个原因就是避免重复开辟内存,提高执行效率,减少内存空间(如果自定义的对象比较大的话不以引用的形式返回,那么就要额外再开辟空间,然后赋给调用方法的对象变量)。
具体什么变化你可以写个简单的例子,debug试一试的啊。
C++ 为了实现链式赋值 a=b=c;为什么需要符号重载函数返回引用
a+=b;符号运算的过程就相当于一个函数的调用,过程相当于a=(a.+=(b)),就是要保证符号重载函数调用者与调用完之后的那个返回变量指向同一块地址,即谁操作了重载函数,返回的还是它自身(同一块地址,没有另外开辟内存空间)。
...c++中,const int a=1; 与 int const a=1;有什么区别?
函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在类的赋值函数中,目的是为了实现链式表达。例如:class A { A & operate = (const A &other); \/\/ 赋值函数 };A a, b, c; \/\/ a, b, c 为A 的对象 a = b = c; \/\/ 正常的链式赋值 (a = b) = c; \/\/ 不正常的...
适合初学者的c++视频教程
提取码: rwyi 复制这段内容后打开百度网盘手机App,操作更方便哦 若资源有问题欢迎追问~
Java的const怎么用
对于赋值函数,应当用“引用传递”的方式返回String对象。如果用“值传递”的方式,虽然功能仍然正确,但由于return语句要把 *this拷贝到保存返回值的外部存储单元之中,增加了不必要的开销,降低了赋值函数的效率。例如:String a,b,c;…a = b; \/\/ 如果用“值传递”,将产生一次 *this 拷贝 a = ...
Java如何实现const
对于赋值函数,应当用“引用传递”的方式返回String对象。如果用“值传递”的方式,虽然功能仍然正确,但由于return语句要把 *this拷贝到保存返回值的外部存储单元之中,增加了不必要的开销,降低了赋值函数的效率。例如:String a,b,c;…a = b; \/\/ 如果用“值传递”,将产生一次 *this 拷贝 a = ...