c 11 – 为什么我不能使用大括号括起初始化列表来调用复制构造函
发布时间:2020-12-16 09:46:36 所属栏目:百科 来源:网络整理
导读:我试图运行Bjarne Stroustrup编写的新C编程语言书中的代码似乎不起作用.哪个编译器支持语法S y {x};在代码中?无法编译,我试过g,vc,还没有Clang,那个错误代码假设是一个初始化,之后,我把那个代码更改为S y = x;一个作业,但没有输出结果作为评论,我错了吗? s
我试图运行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也没有解决此问题(相应的DR见
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1467).
我们希望编译器能够追溯到C 11和C 14模式的未来修复.下一期问题清单修订应包含问题1467的建议措辞,以解决此问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |