编辑:为了清楚,结构没有做任何事情,因为它没有任何功能.我想我给人的印象是我认为使用初始化列表并将构造函数的主体留空是问题.
假设我使用结构来保存两个值,我有一个构造函数,所以我可以创建一个像这样的任意结构:
struct twoValues
{
int x;
int y;
twoValues(int x_, int y_):y(y_),x(x_)
{}
};
someFunction(twoValues(1,2));
Run Code Online (Sandbox Code Playgroud)
这使我不必这样做:
twoValues anInstance;
anInstance.x=1;
anInstance.y=2;
someFunction(anInstance);
Run Code Online (Sandbox Code Playgroud)
编辑:你们都是正确的,我也可以用以下内容初始化:
twoValues anInstance = {1,2};
Run Code Online (Sandbox Code Playgroud)
我认为没有错,但我从C++测试得到了一些反馈,其中一个负反馈标记是"没有做任何事情的结构的构造函数".我与测试我的人接触有限,因此从未问过为什么.
这是一件坏事,为什么?我宁愿继续这样做.
为什么这段代码片段运行正常
void foo(int i)
{
switch(i) {
case 1:
{
X x1;
break;
}
case 2:
X x2;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
而以下给出了编译错误('case'标签跳过'x1'的初始化)?
void foo(int i)
{
switch(i) {
case 1:
X x1;
break;
case 2:
X x2;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道使用大括号引入了一个新的范围,因此在我们打开它的开头大括号之前,不会为x1分配存储空间.但x2仍然在一个案例标签内初始化,没有括号.这不是一个错误吗?
我认为在两个代码片段中都可以有条件地跳过x2的初始化
可能重复:
C++中struct和class之间有什么区别
我使用到想的只有 C++类之间的差异是私营的默认类成员访问修饰符和悠闲的出样-C的保证.
事实证明我错了,因为这段代码不能编译:
class { int value; } var = { 42 };
Run Code Online (Sandbox Code Playgroud)
这样做:
struct { int value; } var = { 42 };
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么会有区别,但显然在Visual C++ 2008中:
错误C2552 ::
'var'
无法使用初始化列表初始化非聚合
所以,是的,我会问多次重复的问题(希望没有重复的答案!):
当然,如果你发现我在其他问题上遗漏了一些东西,我可以随意关闭它 - 我当然可以.但我没有看到在任何答案中都讨论过这个问题,所以我想我会问.
我想问一下以下两个陈述之间是否有任何区别:
// C++11
std::vector<int> d {1, 2, 3};
std::vector<int> d = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
在这两种情况下都会调用序列构造函数:
class A {
public:
int a;
A() {
cout << "default constructor" << endl;
};
A(const A& other) {
cout << "copy constructor" << endl;
};
A& operator =(const A& other) {
cout << "assignment operator" << endl;
}
A(std::initializer_list<int> e) {
cout << "sequence constructor" << endl;
};
A& operator =(std::initializer_list<int> e) {
cout << "initializer list assignment operator" << endl;
}
};
int …
Run Code Online (Sandbox Code Playgroud) 我知道这个问题很简单,但是很简单,我没有找到任何资源来定义什么是"支撑或平等".
那些是所有支撑或等于初始化器吗?
++++++++++++++++++++++++++++++++++++++
int foo= 42;
int foo{42};
int foo= {42};
int foo[]{41,42,43};
int foo[]={41,42,43};
struct Foo{
int data= 42;
};
Run Code Online (Sandbox Code Playgroud)
考虑到上述结构,在两种情况下都是data
初始化或不是初始化:
Foo foo{42}
Foo foo= {42}
Foo foo{.data=42}
Foo foo= {.data=42}
Run Code Online (Sandbox Code Playgroud)
++++++++++++++++++++++++++++++++++++++