foo(foo &afoo): va(foo,va++){
}
此代码段的安全问题或问题是什么。
答案 0 :(得分:1)
这与g ++编译,我认为没有任何UB
struct Va
{
Va(struct Foo&, int) {}
};
int operator++(const Va&, int) { return 42; }
struct Foo
{
Va va;
Foo(Foo &afoo) : va(afoo,va++) {}
};
具体operator++
对尚未初始化的va
数据成员没有做任何事情。它或多或少像将*this
(作为参考)或this
(作为指针)传递给基类或初始化列表中的函数......某些编译器正确地将其报告为危险操作但是如果没有访问引用的对象是合法的(如果你只需要地址,它实际上有时是有用的。)
答案 1 :(得分:0)
它是UB,因为它在单个命令中更改了两次va的值。
但不是:foo(foo &afoo): va(afoo,va++) {}
?