作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图运行 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;
}
是不是有什么魔力,或者只是书上的代码不对。任何建议谢谢。
最佳答案
这是 C++11 措辞的一个已知问题。 C++14 CD 也没有修复此问题(请参阅 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1467 以获取相应的 DR)。
我们可以希望编译器在他们的 C++11 和 C++14 模式中追溯地实现 future 的修复。下一个问题列表修订版应包含解决此问题的问题 1467 的建议措辞。
关于c++11 - 为什么我不能使用大括号括起来的初始化列表来调用复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17938177/
我是一名优秀的程序员,十分优秀!