c++ - 常量变量初始化仅适用于成员初始化列表

标签 c++ constructor constants member-initialization initialization

考虑代码片段

 class Test{
  const int i;
  public:
 // Test(int x):i(x){} This works
  Test(int x){
      i=x;
  } //this doesn't work

为什么内联成员初始化列表可以工作,而普通初始化却不起作用?

最佳答案

请注意,i=x; 是一个赋值。如果您不通过成员初始化器列表初始化它,i 将尝试默认初始化,然后在构造函数的主体中分配。

但作为 const 变量,i 不能默认初始化(或赋值)。所以必须在 member intializer list 中指定它用于初始化。

Member initializer list is the place where non-default initialization of these objects can be specified. For members that cannot be default-initialized, such as members of reference and const-qualified types, member initializers must be specified.

关于c++ - 常量变量初始化仅适用于成员初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42758193/

相关文章:

java - java中构造函数线程的方法引用是安全的吗?

c# - 在 .NET 中,为什么常量在编译时而不是在 JIT 时求值?

c# - 我可以在 C# 中声明带有千位分隔符的常量整数吗?

c++ - Qt 中简单的无键盘触摸屏小部件

c++ - 在构造函数之后立即编程 SegFaults。 C++

c++ - 如何从 C++ 源代码中提取所有类型定义、结构和 union

c++ - 没有匹配函数调用 'WidgetBridge::WidgetBridge()'

c# - 您将如何在 C# 项目中存储表格常量数据?

c++ - 为什么在使用 `std::views::reverse` 时对过滤函数进行了多余的调用?

c++ - 将字符串分配给 stack.top() 时出现段错误