【发布时间】:2021-01-05 10:53:16
【问题描述】:
我最近遇到了 C++14 标准的统一初始化问题。我编写了一个代码,它声明了一个具有两个构造函数的类,第一个是参数化构造函数,另一个是具有intializer_list 的构造函数。代码如下,
#include <iostream>
#include <vector>
class MyClass final {
public:
MyClass() = default;
explicit MyClass(const int a, const int b)
: m_a(a)
, m_b(b)
{
std::cout << "From constructor" << std::endl;
};
MyClass(std::initializer_list<int> init_li)
: m_a(init_li[0])
, m_b(init_li[1])
{
std::cout << "Initializer List constructor" << std::endl;
}
void PrintValues() const
{
std::cout << m_a << " " << m_b << std::endl;
}
private:
int m_a, m_b;
}
int
main(void)
{
using namespace std;
vector<int> a{ 1, 2 }; // Creates a vector with initializer list. Very nice.
vector<int> a{ (1, 2) }; // Calls a vector constructor "explicit vector(std::size_t __n, const std::allocator<int> &__a = std::vector<int>::allocator_type())" NOT INITIALIZER LIST constructor. Okay.
MyClass a{ 1, 2 }; // Calls the initializer list constructor. Fine.
MyClass b{ (1, 2) }; // Also calls the initializer list constructor. What???
b.PrintValues();
return 0;
}
所以,我的问题是为什么我不能像在带括号的向量中那样在 MyClass 中调用具有统一初始化的初始化列表以外的构造函数?
【问题讨论】:
标签: c++ vector uniform-initialization