【问题标题】:Definition recognized as a function-declaration定义为函数声明
【发布时间】:2023-03-12 07:05:01
【问题描述】:

我在函数中有一个局部变量:

vector<extend_t> newExtends( extend_alloc_t( alloc ) );

不幸的是,它被识别为函数定义。我该如何防止呢?

【问题讨论】:

  • 这被称为“最麻烦的解析”。插入多余的(...) 可能会有所帮助。
  • 使用{ ... } 而不是( ... )
  • @ChrisMM:大声笑,我刚洗完澡也有了同样的想法。不过还是谢谢。
  • it gets recognized as a function definition,我想你的意思是声明

标签: c++ most-vexing-parse


【解决方案1】:

简单的解决方案:使用带有= 的复制初始化,如下所示:

auto newExtends = std::vector<extend_t>( extend_alloc_t( alloc ) );

[注意实际复制要省略]

【讨论】:

    【解决方案2】:

    你可以使用{}

    std::vector<extend_t> newExtends = std::vector<extend_t>{extend_alloc_t(alloc)};
    

    【讨论】:

    • 不幸的是,使用花括号 {} 的工作方式并不完全相同,因为这将调用构造函数的 std::initializer_list 重载。
    • 没有理由同时使用auto newExtends = ... 花括号。前者就够了,后者有风险,因为行为会根据extend_textend_alloc_t 的不同而改变。
    猜你喜欢
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多