我试图运行 Bjarne Stroustrup 编写的新 C++ 编程语言书中的代码似乎不起作用。哪个编译器支持S y {x};
代码中的语法?无法编译,我尝试了g++,vc++,还没有Clang,那个错误代码应该是一个初始化,之后,我将该代码更改为S y = x;
一个赋值,但没有将结果输出为注释,我在哪里错了吗?
struct S {
int* p; // a pointer
};
S x {new int{0}};
void f()
{
S y {x}; // "copy" x
*y.p = 1; // change y; affects x
*x.p = 2; // change x; affects y
delete y.p; // affects x and y
y.p = new int{3}; // OK: change y; does not affect x
*x.p = 4; // oops: write to deallocated memory
}
然后我用 C++03 版本重写了代码,它按照描述的方式工作,如下所示:
struct S
{
int *p;
};
int main()
{
S x;
x.p = new int;
*(x.p) = 0;
S y = x;
*y.p = 1;
*x.p = 2;
delete y.p;
y.p = NULL;
x.p = NULL;
y.p = new int;
*(y.p) = 3;
*(x.p)= 4;
}
是不是有什么魔力,或者只是书中的代码不正确。任何建议谢谢。