#include <string>
#include <cstdio>
int main() {
std::string s = "12345678";
std::printf("[%s]\n", s);
}
これは、".c_str()" の欠落による明らかなタイプミスです。しかし、VS2011 は /Wall でも警告を発せず、プログラムは動作します。このコードを gcc でコンパイルすると、「警告: '...' を介して非 POD タイプ 'struct std::string' のオブジェクトを渡すことはできません。呼び出しは実行時に中止されます」と表示され、プログラムは「不正な命令」でクラッシュします。 .
このタイプミスが非常に一般的であるという理由だけで、VS STL にトリックを実装して、そのようなタイプミスのあるプログラムを機能させたのでしょうか?
更新:問題は、なぜVSで機能するのですか?