g++11开启C++11后构造函数委托用花括号初始化报expected a '('错误
问题原因
你遇到的编译报错是C++版本语法限制导致的:
- C++11标准首次引入构造函数委托特性时,仅允许使用圆括号
()传递待委托构造函数的参数,不支持花括号{}的统一初始化语法 - 花括号形式的构造函数委托是C17才新增的语法特性,你指定
-std=c++11参数编译时,g会按照C++11语法校验,因此会触发"expected a '('"的报错。
解决方案
有两种可选解决方式:
方案1:适配C++11标准修改语法
把报错行的花括号替换为圆括号即可,修改后代码如下:
// Copy Constructor Move(const Move& source) : Move( *source.data ) // 将{}替换为()即可通过C++11标准编译 { // 原有后续逻辑不需要修改 std::cout << "Copy Constructor is called -" << "Deep copy for " << *source.data << std::endl; }
方案2:升级编译标准到C++17及以上
如果你的项目允许使用更高版本的C++标准,将编译参数从-std=c++11改为-std=c++17(或更高的-std=c++20/-std=c++23),原有花括号写法不需要任何修改即可正常编译通过。
内容的提问来源于stack exchange,提问作者g.pickardou
相关产品推荐
相关产品推荐

