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”,它仍然会发生.