Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;返回具有常量成员变量的对象--隐式删除赋值运算符_C++_Return Value_Assignment Operator - Fatal编程技术网

C++ C++;返回具有常量成员变量的对象--隐式删除赋值运算符

C++ C++;返回具有常量成员变量的对象--隐式删除赋值运算符,c++,return-value,assignment-operator,C++,Return Value,Assignment Operator,我该如何避开这个问题?我希望使用常量成员变量以避免将来意外修改有一个自动生成的复制构造函数,它将等效于 [assignment operator] is implicitly deleted because the default definition would be ill-formed: 使用它来创建副本,因此: MyStruct(MyStruct &s): a(s.a), b(s.b) {} 有一个自动生成的复制构造函数,它将等效于 [assignment operator]

我该如何避开这个问题?我希望使用常量成员变量以避免将来意外修改

有一个自动生成的复制构造函数,它将等效于

[assignment operator] is implicitly deleted because the default definition would be ill-formed:
使用它来创建副本,因此:

MyStruct(MyStruct &s): a(s.a), b(s.b) {}

有一个自动生成的复制构造函数,它将等效于

[assignment operator] is implicitly deleted because the default definition would be ill-formed:
使用它来创建副本,因此:

MyStruct(MyStruct &s): a(s.a), b(s.b) {}

MyStruct t t=m[2]应使用复制构造函数,而不是赋值运算符。这就是所谓的,您可以做的不是将成员变量设置为const,而是将它们设置为private。然后使用函数访问它们。没有允许更新的功能。你的问题不清楚。显示的错误消息来自行
m[2]=MyStruct(3,4)。但是,您已经正确地注意到该行失败,并且您也正确地注意到可以使用
m.insert
。行
MyStruct t=m[2]
是一个错误,但原因完全不同,与常量变量无关。
运算符[]
不能与映射类型没有默认构造函数的映射一起使用,因为如果映射类型没有默认构造函数,则需要创建一个新条目。您必须使用
m.find
MyStruct t t=m[2]查找此地图应使用复制构造函数,而不是赋值运算符。这就是所谓的,您可以做的不是将成员变量设置为const,而是将它们设置为private。然后使用函数访问它们。没有允许更新的功能。你的问题不清楚。显示的错误消息来自行
m[2]=MyStruct(3,4)。但是,您已经正确地注意到该行失败,并且您也正确地注意到可以使用
m.insert
。行
MyStruct t=m[2]
是一个错误,但原因完全不同,与常量变量无关。
运算符[]
不能与映射类型没有默认构造函数的映射一起使用,因为如果映射类型没有默认构造函数,则需要创建一个新条目。您必须使用
m.find
查找此映射。正如Nathan Oliver的评论所指出的,您甚至可能不需要定义构造函数。只是
MyStruct t t(m[2])
应该足够了。已经有一个隐式生成的复制构造函数与您的构造函数完全相同(除了它也可以绑定到右值),因此此更改不会有任何改进。@M.M.正确的赋值确实回答了这个问题,我在评论中指出有一个自动生成的构造函数。我已经用它更新了答案。根据OP的结构定义,你建议的答案也无法编译。(正如我在对这个问题的评论中所建议的,也许OP实际上并没有发布他的真实代码)正如Nathan Oliver的评论所指出的,您甚至不需要定义构造函数。只是
MyStruct t t(m[2])
应该足够了。已经有一个隐式生成的复制构造函数与您的构造函数完全相同(除了它也可以绑定到右值),因此此更改不会有任何改进。@M.M.正确的赋值确实回答了这个问题,我在评论中指出有一个自动生成的构造函数。我已经用它更新了答案。根据OP的结构定义,你建议的答案也无法编译。(正如我在对这个问题的评论中所暗示的,也许OP实际上并没有发布他的真实代码)