小编And*_*rés的帖子

“explicit”关键字如何影响 C++ 复制构造函数和函数参数?

修改复制构造函数的“ explicit ”关键字可能会导致问题。\n作为函数参数传递的对象特别容易受到这些问题的影响。

\n

这是我的代码:

\n
#include <iostream>\n#include <string>\n\nclass Pig{\npublic:\n    std::string _name;\npublic:\n    Pig(std::string n) : _name(n) {}\n    //~Pig() = default;\n    explicit Pig(const Pig &other) {\n        std::cout << "copy ctor!" << std::endl;\n        this->_name = other._name;\n    }\n};\n\nvoid show(Pig p) {\n    std::cout << p._name << std::endl;\n}\n\nint main() {\n    Pig pig{std::string("hello")};\n    show(Pig{pig});     // no pass\n    // show(Pig(pig));  // no pass\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

编译器版本:g++(Ubuntu 9.4.0-1ubuntu1~20.04.1)9.4.0。

\n

上面提到的代码不能用c++14 或更低版本编译,\n但用c++17 及更高版本编译成功。

\n

这是编译器的错误:

\n
test.cpp: In function \xe2\x80\x98int main()\xe2\x80\x99:\ntest.cpp:22:7: error: cannot …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors explicit copy-elision elision

4
推荐指数
1
解决办法
124
查看次数

标签 统计

c++ ×1

compiler-errors ×1

copy-elision ×1

elision ×1

explicit ×1