Class 初始化列表不适用于复制构造函数
Class Initializer list does not work with copy constructor
我有这个 class A,只有一个变量,如果没有复制构造函数,使用初始化列表初始化变量完全没问题。
class A {
public:
int x;
};
int main()
{
A a = {2};
printf("Hello World");
return 0;
}
但是,如果我在 class 中有一个复制构造函数,我会收到错误消息
main.cpp:23:13: error: could not convert ‘{2}’ from ‘’ to ‘A’
A a = {2};
代码:
class A {
public:
int x;
A(A& v)
{
printf("Copied");
}
};
int main()
{
A a = {2};
printf("Hello World");
return 0;
}
为什么会这样?
用户声明的构造函数A::A(A&)
使A
不是一个集合,那么它就不能像{2}
一样从brace-init-list中aggregate-initialized了。
您可以添加一个采用 int
的构造函数,例如
class A {
public:
int x;
A(int x) : x(x) {}
A(const A& v)
{
printf("Copied");
}
};
然后
A a = {2}; // list-initialize a from {2} by constructor A::A(int)
顺便说一句:复制构造函数通常采用 const T&
。
我有这个 class A,只有一个变量,如果没有复制构造函数,使用初始化列表初始化变量完全没问题。
class A {
public:
int x;
};
int main()
{
A a = {2};
printf("Hello World");
return 0;
}
但是,如果我在 class 中有一个复制构造函数,我会收到错误消息
main.cpp:23:13: error: could not convert ‘{2}’ from ‘’ to ‘A’
A a = {2};
代码:
class A {
public:
int x;
A(A& v)
{
printf("Copied");
}
};
int main()
{
A a = {2};
printf("Hello World");
return 0;
}
为什么会这样?
用户声明的构造函数A::A(A&)
使A
不是一个集合,那么它就不能像{2}
一样从brace-init-list中aggregate-initialized了。
您可以添加一个采用 int
的构造函数,例如
class A {
public:
int x;
A(int x) : x(x) {}
A(const A& v)
{
printf("Copied");
}
};
然后
A a = {2}; // list-initialize a from {2} by constructor A::A(int)
顺便说一句:复制构造函数通常采用 const T&
。