在已删除的副本分配中检测到虚假错误
Spurious errors detected with deleted copy assignment?
我有以下琐碎的结构
struct crazy
{
const int i = 10;
};
这显然是不可复制的。事实上,如果我有两个这样的对象,比如对象1和对象2,并尝试类似的语句
object1 = object2;
我处理的两个编译器,即clang 3.4.2和gcc 4.8.3(好吧,它们可能已经过时了…),都抱怨并拒绝了合理和类似的诊断。
但是,为什么在这种情况下,gcc在const成员i?无论我将"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成员的初始化无关。
如果你问编译器为什么认为你可能想要两者:因为两者都有助于诊断问题。也许你不应该复制对象,在这种情况下,第一个告诉你不能。也许你想,在这种情况下,第二个告诉你为什么不能。
相关文章:
- 错误:在尝试检测 std::cout 是否<< t 时,功能强制转换为数组类型;有效
- 如何从标准输入中检测格式化输入错误?
- 程序停止运行,但未检测到错误
- JNI 在应用程序中检测到错误:在为 innerclass 调用 NewObject 时使用了无效的 jobject
- 在C++中检测到堆损坏错误
- 未知C++错误:致命错误:glibc检测到无效的stdio句柄
- Clang 无法检测到初始化并给出错误
- 如何检测内存分配/空闲错误的对象?
- 想要构建一些必要的库来检测功能.出现一些错误
- Android (ART) 崩溃并显示错误 JNI 在应用程序中检测到错误:jstring 是无效的本地引用
- 保护类内存阵列以检测分段错误
- 舍入错误检测
- 从emxArray_uint8_T检测到错误:.text+0xc1):未定义对"emxInit_uint8_T1(emxArray_uint8_T**, int)"的引用?
- 边缘检测-检测错误
- Sobel 边缘检测错误(OpenCV 错误:断言失败 (DIMS<=2&&Data&&(无符号)i0)
- 如何检测错误写入
- 当提升内存映射文件分配的磁盘空间超过HDD上的可用空间时,如何检测错误
- 如何检测错误的数据类型
- VS10上的c++人脸检测错误
- 图像轮廓检测错误:OpenCV,C++