C++ 为什么我会得到成员的意外零初始化?
C++ Why do I get unexpected zero-initialize for member?
阅读 how new works in C++ 我尝试了以下代码:
#include <iostream>
using namespace std;
struct A { int m; }; // POD
int main()
{
A* a = new A;
cout<<"A m="<<a->m<<endl;
return 0;
}
并且输出总是"A m=0"。
为什么不显示残值,如何显示?
其他信息:在 Ubuntu 16.04 上使用 5.4.0 20160609。尝试使用 -std=C++ 03、98 和 11 标准进行编译
m
的值未指定,可能是 1337
或 0
,如您的情况。这并不意味着 0
不是残值(它和任何其他数字一样是残值),您永远不应该依赖于此。
实践中可能发生的情况是,您在调试中进行编译,编译器在将请求的字节提供给您之前将其清零。
阅读 how new works in C++ 我尝试了以下代码:
#include <iostream>
using namespace std;
struct A { int m; }; // POD
int main()
{
A* a = new A;
cout<<"A m="<<a->m<<endl;
return 0;
}
并且输出总是"A m=0"。 为什么不显示残值,如何显示?
其他信息:在 Ubuntu 16.04 上使用 5.4.0 20160609。尝试使用 -std=C++ 03、98 和 11 标准进行编译
m
的值未指定,可能是 1337
或 0
,如您的情况。这并不意味着 0
不是残值(它和任何其他数字一样是残值),您永远不应该依赖于此。
实践中可能发生的情况是,您在调试中进行编译,编译器在将请求的字节提供给您之前将其清零。