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

时间:2018-03-08 09:02:32

标签: c++ structure

我正在阅读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;?是否初始化了struct X类型的变量x,即其 i 的值是否为1?如果是这样,为什么1周围没有花括号?

1 个答案:

答案 0 :(得分:1)

  

我的问题(可能是一个微不足道的问题)是行中发生的事情:X x = 1;

X定义了一个带有一个int的构造函数: Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00) Maven home: /opt/maven Java version: 1.8.0_161, vendor: Oracle Corporation Java home: /usr/lib/jvm/java-8-oracle/jre Default locale: ca_ES, platform encoding: UTF-8 OS name: "linux", version: "4.13.0-36-generic", arch: "amd64", family: "unix"

声明:

X::X(int i)

相当于:

X x = 1;

X x = X(1);

auto x = X(1);

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

  

即。它的值是1?

是的,这是正确的**。

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

auto x = X { 1 };