7
C++用戶定義的文字操作符是否可以傳遞空指針? (gcc版本4.7.0 20111114(實驗)[trunk revision 181364](Debian 20111114-1)),但我不確定這是否是一個錯誤(90%肯定)或一些奇怪的預期行爲。C++用戶定義的文字操作符是否可以傳遞空指針?
示例程序:
#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」,它仍然會發生。
這是一個錯誤?或者當文字的值爲零時出現一些奇怪的特殊情況?
10%不確定== 90%的把握,所以你是90%肯定它是一個錯誤和90%確定它是預期的行爲。 –
@Seth heh,我想這就是這種行爲對我造成的困惑。 ;)當我在添加用戶定義的文字支持的更加複雜的真實問題中遇到這種行爲時,花了將近半小時的時間來弄清楚失敗的原因。我想我應該修正措辭。 =) – wjl
¤這是一個編譯器錯誤。 C++ 11§2.14.8/ 3「將* literal L *視爲」operator「」X(「n」)'「形式的調用。該規則沒有例外(適用時)。乾杯&hth。, –