You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:36:02