#include <iostream>
struct A {
int x;
};
void foo(A a) {
std::cout << a.x << std::endl;
}
int main() {
A a;
foo(a); // -7159156; a was default-initialized
foo(A()); // 0; a was value-initialized
}
是否可以将类型的右值传递A
给foo()
而不对其进行值初始化?我们必须使用值初始化还是左值?
你可能会问,当它“花费”不超过 10 纳秒时,避免值初始化有什么意义。像这样的情况怎么样:我们正在寻找遗留应用程序中由 valgrind 未初始化的内存访问引起的错误,并且零不被视为应用程序的有效值。值初始化将阻止 valgrind 发现未初始化内存访问的位置。
您可能会说打印未初始化的值是 UB,但我的“真实”用例并不限于打印。没有它,我的问题应该仍然有效。