c – 类型t = Type()是否调用复制构造函数?
我真的很困惑….类型t = Type()调用复制构造函数还是没有?
我问,因为当我尝试: #include <iostream> class Test { public: Test(Test const &) { std::cout << "hello"; } Test() { } }; int main() { Test t = Test(); return 0; } 没有输出,但当我改变它 #include <iostream> class Test { Test(Test const &) { std::cout << "hello"; } public: Test() { } }; int main() { Test t = Test(); return 0; } 我明白了: error C2248: 'Test::Test' : cannot access private member declared in class 'Test' 这没有意义(特别是因为这是一个调试版本). 更新: 即便这样编译! struct Test { Test(Test &&) = delete; Test(Test const &) = delete; Test() { } }; int main() { Test t = Test(); return 0; } 复制/移动构造函数是必需还是否? 解决方法
来自维基百科:
您正在进行复制构造,但是标准允许将其转换为直接初始化,并且无论调试是否关闭都可以完成,这就是打印未到达的原因. 但是,因为它“应该”是一个复制结构,你需要访问一个,这就是第二个代码不起作用的原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |