Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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++ 当我试图从成员函数调用构造函数时,为什么IDE会发出警告?_C++_Oop_Constructor - Fatal编程技术网

C++ 当我试图从成员函数调用构造函数时,为什么IDE会发出警告?

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::

我试图通过引用一个成员函数将一个对象作为参数,并将其分配给一个新对象,IDE给了我一个警告,说我应该避免使用自定义构造和销毁的未命名对象。所以我想问一下这样做的另一种选择,或者理解这个警告意味着什么

我使用的是C++17,程序运行良好,一切都很好,但我不知道还有什么方法可以消除警告

实际警告消息:
警告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&)