在类定义中直接初始化成员

问题描述 投票:0回答:2

为什么我们不能在类定义中使用直接初始化?例如,我们可以使用

int z = 5;
语句,但不能在下面的类定义中使用
int y(10);

class Myclass {      
  int y(); // "error: expected ',' or '...' before numeric constant
  int z=5;
};
c++ initialization
2个回答
2
投票

您需要使用大括号而不是圆括号:

int y{10};

Per 成员初始化:

非静态数据成员可以通过以下两种方式之一进行初始化:

  1. 在构造函数的成员初始化列表中。
struct S
{
    int n;
    std::string s;
    S() : n(7) {} // direct-initializes n, default-initializes s
};
  1. 通过默认成员初始值设定项,这是成员声明中包含的大括号或等于初始值设定项,如果成员从构造函数的成员初始值设定项列表中省略,则使用它。
struct S
{
    int n = 7;
    std::string s{'a', 'b', 'c'};
    S() {} // default member initializer will copy-initialize n, list-initialize s
};

0
投票

在 C++ 中,您可以使用直接初始化语法在类定义中初始化变量,如下所示:

int z = 5; // direct initialization using assignment syntax

但是,您不能使用带括号的直接初始化语法,如下所示:

int y(10); // direct initialization using parentheses syntax

这是因为括号语法是为类成员变量的构造函数初始化保留的,不能用于初始化构造函数或成员函数之外的变量。

换句话说,括号语法只用于成员变量的初始化,而不用于类定义中非成员变量的初始化。

因此,如果要在类定义中初始化非成员变量,必须使用赋值语法而不是括号语法。

© www.soinside.com 2019 - 2024. All rights reserved.