【发布时间】:2016-10-31 04:36:27
【问题描述】:
1 class Foo{
2
3 };
4
5 Foo func1(){
6 Foo f;
7 return f;
8 }
9
10 int func2(){
11 int a = 2;
12 return a;
13 }
14
15 int main(int argc, char** argv){
16 Foo var1;
17 func1() = var1; //OK
18 func2() = 1; //error: expression is not assignable
19 return 0;
20 }
不允许赋值给内置类型的返回值但允许赋值给用户定义类型的返回值的根本原因是什么?如何管理允许一个但不允许另一个的内存?
【问题讨论】:
-
你认为
func1() = var1;这意味着什么? -
我理解它调用Foo类的赋值运算符,我的问题是内置类型和用户定义类型在这件事上的根本区别是什么? Foo& 运算符=(Foo&);
-
.. 然后呢?
-
复制赋值运算符创建一个源的副本,并为每个数据成员制作一个成员副本。我明白为什么这个有效。为什么它不适用于内置类型?
-
然后丢弃结果。 IE。实际上什么都不做