30 c++
这个叫什么?
Vec3 foo = {1,2,3};
Run Code Online (Sandbox Code Playgroud)
它可以通过操作员或某些人控制吗?我可以指出这应该如何行动?
例如,如果我有一些复杂的类,我可以使用它来分配变量吗?(只是好奇心练习).
Naw*_*waz 44
那不是任务.那就是初始化.
这种初始化仅允许聚合,包括POD类.POD表示普通旧数据类型.
例,
//this struct is an aggregate (POD class)
struct point3D
{
int x;
int y;
int z;
};
//since point3D is an aggregate, so we can initialize it as
point3D p = {1,2,3};
Run Code Online (Sandbox Code Playgroud)
看上面的编译很好:http://ideone.com/IXcSA
但请再考虑一下:
//this struct is NOT an aggregate (non-POD class)
struct vector3D
{
int x;
int y;
int z;
vector3D(int, int, int){} //user-defined constructor!
};
//since vector3D is NOT an aggregate, so we CANNOT initialize it as
vector3D p = {1,2,3}; //error
Run Code Online (Sandbox Code Playgroud)
以上不编译.它给出了这个错误:
prog.cpp:15:错误:在非聚合类型'vector3D'的初始化器周围括起来
看看自己:http://ideone.com/zO58c
point3D
和之间有什么区别vector3D
?只是vector3D
具有用户定义的构造函数,这使它成为非POD.因此无法使用花括号进行初始化!
标准在第8.5.1/1节中说明,
聚合是一个数组或类 (第9节),没有用户声明的构造函数(12.1),没有私有或受保护的非静态数据成员 (第11节),没有基类(第10节),没有虚函数(10.3) ).
然后它在§8.5.1/ 2中说,
初始化聚合时,初始化程序可以包含一个初始化子句,该子句由括号括起来的逗号分隔的聚合成员初始化子句列表组成,以增加的下标或成员顺序编写.如果聚合包含子聚合,则此规则将递归地应用于子聚合的成员.
[Example:
struct A
{
int x;
struct B
{
int i;
int j;
} b;
} a = { 1, { 2, 3 } };
initializes a.x with 1, a.b.i with 2, a.b.j with 3. ]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12758 次 |
最近记录: |