C ++用户定义的文字运算符是否可以传递空指针?
g ++的实验版本(gcc版本4.7.0 20111114(实验性)[trunk revision 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中的一个错误......但也许不是?!因此问题):
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”,它仍然会发生。
这是一个错误吗?或者一些奇怪的特例,当文字的值为零时?
答案 0 :(得分:5)
正如Alf P. Steinbach在评论中向我保证的那样,这是一个错误,而不是标准行为(因为我使用的是gcc快照,所以没什么大不了的。)
我去了一个gcc bug,但看起来已经上传并修复了上游: