#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,但我的“真实”用例不仅限于打印.没有它,我的问题应该仍然有效.