【发布时间】:2022-01-04 15:03:55
【问题描述】:
当前使用 Clang++ 13.0.0 和 GCC G++ 11.2.0。
以下代码已针对上下文进行了简化。当我使用 g++ 运行代码时,它运行时没有任何警告或错误。当我使用 Clang 运行代码时,出现以下错误:
field 'cat' is uninitialized when used here [-Werror,-Wuninitialized]
有没有办法解决这个问题?
代码:
struct Bar {
Object *ptr;
int y;
};
struct Foo {
Object *ptr;
Bar cat;
};
class Test {
Foo animal;
Test()
: animal{
generateObject(),
{
animal.ptr,
0
}
}
{}
};
【问题讨论】:
-
cat{0, 0}:-) -
好吧,
cat{0, 0}将是解决此问题的明显方法。 -
但是如果我需要使用 cat.x 怎么办?我是否必须采取不同的方法来避免这种情况?还是只要用 g++ 编译就可以了?
-
@Locklan:Clang 是对的,因为它是 UB。
cat.x尚未初始化。 gcc 只是没有发现问题。 -
为什么需要使用
cat.x,尤其是在它被初始化之前?