我正在阅读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周围没有花括号?
答案 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 };