小编Tim*_*sky的帖子

C++11 统一初始化:初始化列表和多参数构造函数之间的歧义?

目前正试图围绕 C++11 的统一初始化进行思考。我遇到了这个模棱两可的情况:考虑一个类,它可以由一个双参数构造函数或一个任意长度的初始化列表构造:

class Foo {
  public:
    Foo(int a, int b) {
      std::cout << "constructor 1" << std::endl;
    }
    Foo(std::initializer_list<int>) {
      std::cout << "constructor 2" << std::endl;
    }
};
Run Code Online (Sandbox Code Playgroud)

遵循统一的初始化约定,我希望以下内容起作用:

Foo a (1, 2)印刷品constructor 1(废话)

Foo b {1, 2} 印刷 constructor 1

Foo c = {1, 2} 印刷 constructor 2

但是,编译器似乎将其解释Foo b {1, 2}为列表初始化,并调用构造函数 2。()当存在初始化列表构造函数时,语法是否是强制编译器考虑其他类型构造函数的唯一方法?

c++ c++11

7
推荐指数
1
解决办法
172
查看次数

标签 统计

c++ ×1

c++11 ×1