gpt4 book ai didi

c++ - 已删除的拷贝分配检测到虚假错误?

转载 作者:太空狗 更新时间:2023-10-29 20:39:14 26 4
gpt4 key购买 nike

我有以下简单的结构

  struct crazy
{
const int i = 10;
};

这显然是不可复制的。事实上,如果我有两个那种类型的对象,比如说object1 和 object2,并尝试像这样的语句

  object1 = object2;

我处理的两个编译器,即 clang 3.4.2 和 gcc 4.8.3(好吧,它们可能已经过时了......),提示并拒绝合理且拒绝的代码类似的诊断。

但是,为什么在那种情况下,gcc 在常量成员我?无论我将“const”更改为“constexpr”,都会检测到此类错误。

最佳答案

我得到的错误是:

test.cpp: In function ‘int main()’:
test.cpp:10:13: error: use of deleted function ‘crazy& crazy::operator=(const crazy&)’
object1 = object2;
^
test.cpp:3:8: note: ‘crazy& crazy::operator=(const crazy&)’ is implicitly deleted because the default definition would be ill-formed:
struct crazy
^
test.cpp:3:8: error: non-static const member ‘const int crazy::i’, can’t use default assignment operator

第一个错误是因为你说的赋值运算符被删除了。第二个是注释的一部分,解释了它被删除的原因:如果它没有被删除,默认定义将产生的错误。两者都与 const 成员的初始化没有任何关系。

如果您问为什么编译器认为您可能需要两者:因为两者都有助于诊断问题。也许你不应该复制对象,在这种情况下,第一个告诉你不能。也许你想,在这种情况下,第二个会告诉你为什么你不能。

关于c++ - 已删除的拷贝分配检测到虚假错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28478177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com