【发布时间】:2017-09-29 03:02:48
【问题描述】:
我尝试在屏幕上打印一个 nullptr,并且:
int* ptrA = nullptr;
std::cout<<ptrA<<"\n"; // print 0
char* ptrB = nullptr;
std::cout<<ptrB<<"\n"; // print nothing, program exit with code 0
... // never execute
我认为编译器 (g++ 4.8.4) 可能会警告我不应该尝试计算 nullptr。事实是:程序中止,'/test has exited with code 0 (0x00000000)',就像它正常终端一样。
为什么?我的意思是,如果我做错了什么,或者这样做的目的是什么?
谢谢
感谢大家,我知道行为可能是未定义的, 让 char* 成为字符串,或打印地址。 并被建议永远不要这样做。 我只是想知道为什么程序没有告诉我任何东西,比如警告、断言或使用 -1 之类的代码退出,或者其他任何东西。 是编译器的设计行为吗?
【问题讨论】:
-
简单的答案是,这不是一个非常高优先级的事情。 C++ 经常错误地假设程序员知道他们在做什么并且提供很少的训练轮。您可能会发现一些有趣的东西:gcc.gnu.org/bugzilla/show_bug.cgi?id=16351您可能还会阅读一些关于静态分析和误报的困难的文章。
-
我打赌它确实以代码-1(或其他代码)退出