C++ 当我试图从成员函数调用构造函数时,为什么IDE会发出警告?
我试图通过引用一个成员函数将一个对象作为参数,并将其分配给一个新对象,IDE给了我一个警告,说我应该避免使用自定义构造和销毁的未命名对象。所以我想问一下这样做的另一种选择,或者理解这个警告意味着什么 我使用的是C++17,程序运行良好,一切都很好,但我不知道还有什么方法可以消除警告 实际警告消息:C++ 当我试图从成员函数调用构造函数时,为什么IDE会发出警告?,c++,oop,constructor,C++,Oop,Constructor,我试图通过引用一个成员函数将一个对象作为参数,并将其分配给一个新对象,IDE给了我一个警告,说我应该避免使用自定义构造和销毁的未命名对象。所以我想问一下这样做的另一种选择,或者理解这个警告意味着什么 我使用的是C++17,程序运行良好,一切都很好,但我不知道还有什么方法可以消除警告 实际警告消息:警告C26444避免使用自定义构造和销毁的未命名对象(es.84)。项目2 c:\xx\repos\Project2\Project2\big\u int.cpp 304 void big_int::
警告C26444避免使用自定义构造和销毁的未命名对象(es.84)。项目2 c:\xx\repos\Project2\Project2\big\u int.cpp 304
void big_int::copyInto(big_int&b){
b=big_int{this->data};//this->data是字符串
}
假设类big_int
有一个构造函数,它接受一个字符串
,这一行给出了前面提到的警告
p、 s:我知道这正是复制构造函数本身的工作,但我只是举了一个例子来阐述我的问题。挑剔:这不是调用构造函数。直接这样做是不可能的。语法看起来像这样,但是没有语法来执行它 您真正要做的是创建一个类型为
big\u int
的临时文件,并将其分配给b
我想不出有什么不对。奇怪的警告
您可以通过将新对象提升到命名变量中,然后移动并分配它来解决此问题,但该代码更为冗长,而且完全没有必要。(我认为它禁止保证省略?不确定这与这个特定的例子有关,但是嘿。)
我只想禁用警告
避免未命名对象[…]
因此,请说出:
void big_int::copyInto(big_int& b) {
auto temp = big_int{this->data}; // this->data is string
b = std::move(temp);
}
或者显式禁用警告
void big_int::copyInto(big_int& b) {
#pragma warning (push)
#pragma warning (disable : 26444) // Avoid unnamed objects with custom construction and destruction
b = big_int{this->data}; // this->data is string
#pragma warning (pop)
}
我会做
b=*这个
并让赋值操作符完成它的工作。@mch您读了最后一个注释了吗?我不是这么做的。“这只是为了精雕细琢。”谢谢你,我把它添加到问题中了!我不明白为什么有人会在这条消息中推荐这个建议。我不是在说复制构造函数bigint(constbigint&)
,但关于赋值运算符bigint&operator=(const-bigint&)代码>