我试图运行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;
}
这是因为书中的代码不正确,而非有什么魔法。建议进行修改。谢谢。