默认值初始化作为对象的数据成员
Default initialize data members that are objects?
为什么必须在构造函数中初始化对象数据成员,而不能像基元类型那样默认初始化它们?是否可以像使用基元类型一样初始化它们?
下面是一个示例:
class foo {
int a;
public:
foo(int _a) :a(_a) {};
};
class bar {
string a = "asdf";//no error
int num = 1;//no error
foo x(1); //error, why?
foo z;
public:
bar(): z(1){}//no error
};
类内初始值设定项仅适用于operator=
语法或大括号初始值设定项列表,不适用于函数样式初始化。所以
foo x{1};
而不是
foo x(1);
应该做这个伎俩。
在您的情况下,您还可以使用
foo x = 1;
但是如果foo
的构造函数采用单个int
explicit
,这将中断。
允许在类定义中直接初始化会导致难以区分函数声明:
考虑:
struct k;
struct foo { foo(int x = 1){} };
class toto
{
static constexpr int k = 1;
foo x(1); // hm might be ok...
foo y(); // hm ... NOK , what y is ? an object or a function declaration?!?!
foo z(k); // problem .... this seems a fucntion definition?!!!
foo z{k}; // clear it is not a function definition
};
正确的方法是:
foo f= 1;
或
foo f{1};
或
foo f = {1};
相关文章:
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用指针访问数组中的对象数据成员
- 访问数据成员(本身是对象)的数据成员,就好像它们是类成员一样
- 有没有办法在C++中循环访问对象的不同数据成员
- "Class1"类"Class2"对象作为私有数据成员。如何通过"Class 2"函数引用"Class1"对象?
- 如何使用数据成员填充派生类的对象到基类的指针数组中
- 如何在C++中使用类对象访问指针数据成员
- C++中的常量对象或私有/常量数据成员(变量)?
- 指向未由对象地址初始化的对象的指针如何将值分配给类的数据成员
- 通过向量中的对象的数据成员迭代
- 继承的类对象如何使用私有数据成员
- 我如何在参考上使用数据成员而不使用新关键字创建对象
- 从R中访问C 对象数据成员
- 静态数据成员是否在所有类对象之前初始化?
- 通过指向对象数据成员的指针更改该对象的值
- 派生类没有额外的数据成员;将基对象静态向下转换为派生对象是否安全
- 只有当声明一个对象时,内存空间才会分配给类的数据成员,那么为什么 Sizeof(class_name) 给我结果
- 如何在 c++ 中从对象数组中获取数据成员数组
- 创建带或不带指针的数据成员对象
- 省略数据成员对象的初始值设定项列表条目