考虑:
struct box
{
int array[3];
};
int main()
{
box a = {1};
}
Run Code Online (Sandbox Code Playgroud)
如果以上工作在C++中那么为什么以下工作不起作用?
struct box
{
int simple_int;
};
int main()
{
box b = 2;
}
Run Code Online (Sandbox Code Playgroud)
是什么原因?
Eri*_*hil 87
正确地说,前者会使用box a = { { 1 } },因此每个聚合都有一组括号.外部括号组用于结构,内部组用于阵列.但是,该语言允许您省略内括号.
在后者中,没有内部括号可以省略.你不能省略外括号; 您必须至少有一组大括号来区分聚合的初始值设定项列表.从某种意义上说,大括号说"这是把团粒内部的事情列出来."当你写box b = 2,编译器不知道你想要把2 里面的总和.相反,看起来你正试图初始化b对象(而不是它的一部分)2.因此,编译器会尝试查找将a更改2为a 的构造函数或转换box.如果失败,则会出错.
Nei*_*irk 18
它不起作用,因为您的语法错误.您可以使用隐式构造函数添加对b = 2的支持,如果这是您想要的.
box b = {2}; // correct syntax with no constructor
Run Code Online (Sandbox Code Playgroud)
要么
struct box
{
// implicit constructor
box(int i) : i(i) {}
int i;
};
box b(2);
box c = 2;
Run Code Online (Sandbox Code Playgroud)
要么
struct box
{
explicit box(int i) : i(i) {}
int i;
};
box b(2);
box c = 2; // disallowed
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1945 次 |
| 最近记录: |