C用户定义的文字运算符是否可以传递空指针?
这实际上发生在g的实验版本(gcc版本4.7.0 20111114(实验性)[主干版本181364](Debian 20111114-1))但我不确定这是否是一个错误(90%肯定)或一些奇怪的预期行为.
示例程序:
#include <iostream> #include <stdexcept> #include <string> std::string operator "" _example (const char * text) { using std::cerr; using std::endl; cerr << "text (pointer) = " << static_cast<const void *>(text) << endl; if (!text) throw std::runtime_error("Is a null pointer really expected?"); cerr << "text (string) = \"" << text << '"' << endl; return text; } int main() { 2_example; 1_example; 0_example; }
输出(可能是gcc中的一个bug ……但也许不是?!,因此问题):
text (pointer) = 0x8048d49 text (string) = "2" text (pointer) = 0x8048d4b text (string) = "1" text (pointer) = 0 terminate called after throwing an instance of 'std::runtime_error' what(): Is a null pointer really expected? Aborted
它不仅仅是“0_example”;每当字面值为零时都是如此.例如,即使文字是“0x0000_example”,它仍然会发生.