void foo (const std::string &s) {}
int main() {
foo(0); //compiles, but invariably causes runtime error
return 0;
}
コンパイラ (g++ 4.4) は明らかに として解釈0
し、 を呼び出しchar* NULL
て構築します。ポインターは c-string への有効なポインターではないため、これはもちろん役に立ちません。を呼び出そうとしても、この誤解は発生しません。これにより、コンパイル時にエラーが発生します。s
string::string(const char*, const Allocator &a = Allocator())
NULL
foo(1)
次のような関数を誤って呼び出したときに、コンパイル時にそのようなエラーまたは警告が発生する可能性はありますか?
void bar(const std::string &s, int i=1);
でbar(0)
、 を忘れて、string
実際に持つ意味はi=0
?