c++ - 默认初始化数据成员是对象?

标签 c++ c++11 object syntax

为什么必须在构造函数中初始化对象数据成员,而不能像原始类型那样默认初始化它们?是否可以像使用原始类型一样初始化它们?

这是一个例子:

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显式,那将中断。

关于c++ - 默认初始化数据成员是对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34720705/

相关文章:

java - 用 Java/C++ 处理 Linux 网络连接?

c++ - 如何在 Windows 10 上安装 jpeglib

java - 类继承和类型转换

c++ - 如何将动态对象数组传递给另一个类的参数化构造函数?

regex - 如何解决这个错误 “no matching function for call to ‘regex_replace..`?

c# - 从未知类返回字符串

c++ - 对象可以作为函数的参数吗?

c++ - 使用 std::tr1::shared_ptr 作为引用计数的内部机制

c++ - std::is_signed 不适用于强类型枚举:int

c++ - shrink_to_fit 是将容量 a `std::vector` 减小到其大小的正确方法吗?