相关疑难解决方法(0)

C++:类数据成员的初始化顺序

在下面的代码中,当X被调用的ctor 首先被调用A或被B调用时?它们放在班级正文中的顺序是否控制了这个?如果有人可以提供C++标准的一小段文本来讨论这个问题,那将是完美的.

class A {};
class B {};
class X
{
 A a;
 B b;
};
Run Code Online (Sandbox Code Playgroud)

c++ initialization class-members

36
推荐指数
2
解决办法
2万
查看次数

为什么不能在类初始化成员中声明自动?

在C++中,您可以这样做:

struct A
{
    int a, b;
    double k = 3; // OK
};
Run Code Online (Sandbox Code Playgroud)

但不是这个

struct A
{
    int a, b;
    auto f = [this]() {return this->a + this->b; }; // Error
};
Run Code Online (Sandbox Code Playgroud)

编译器通知我们错误

非静态数据成员声明'auto'

让我们知道这会奏效

struct A
{
    int a, b;
    function<int(void)> f = [this]() { return this->a + this->b; }; // OK
};
Run Code Online (Sandbox Code Playgroud)

我想问一些有关这方面的见解.特别是为什么(简单的答案是标准明确不允许它根据某些经文)

换句话说:类成员初始化中是否包含足够的成员类型?

我知道在类成员初始化中是语法糖,但这是编译器可以收集附加信息的情况,但由于设计选择而无法这样做?(很像autoC++ 11之前的缺乏)或更深层次选择设置的限制(如静态输入的语言等)?

c++ lambda c++11

7
推荐指数
0
解决办法
150
查看次数

标签 统计

c++ ×2

c++11 ×1

class-members ×1

initialization ×1

lambda ×1