如何在C++中初始化结构

How Structures are initialized in C++

本文关键字:初始化 结构 C++      更新时间:2023-10-16

我正在阅读Stroustrup的TCPPPL。书中的一句话是这样的:

struct X{
int i;
X(int);
X operator+(int);
};
struct Y{
int i;
Y(X);
Y operator+(X);
operator int();
};
extern X operator* (X,Y);
extern int f(X);
X x=1;
Y y=x;
int i=2;
int main()
{
//main body
}

我的问题(也许是一个微不足道的问题)是行中发生了什么:X x = 1;?结构 X 类型的变量 x 是否正在初始化,即它的i被赋予值 1?如果是这样,为什么 1 周围没有大括号?

我的问题(也许是一个微不足道的问题)是行中发生了什么:X x =1;

X 定义了一个构造函数,该构造函数采用一个 int:X::X(int i)

声明:

X x = 1;

相当于:

X x = X(1);

auto x = X(1);

auto x = X { 1 };

即使用 (int) 构造函数构造一个 X。

即它的 i 被赋予值 1?

是的,这是正确的**。

** 或者至少这是我的假设,没有看到构造函数的定义。我假设它看起来像这样:

X::X(int arg)
: i(arg)
{
}