#include <string>
#include <cstdio>
int main() {
std::string s = "12345678";
std::printf("[%s]\n", s);
}
这是缺少“.c_str()”的明显错字。但是即使使用 /Wall VS2011 也不会发出任何警告,并且程序可以正常工作。如果要在 gcc 中编译此代码,它会显示“警告:不能通过 '...' 传递非 POD 类型的对象 'struct std::string';调用将在运行时中止”并且程序因“非法指令”而崩溃.
他们是否真的在 VS STL 中实现了一个技巧来使具有这种错字的程序工作,只是因为这种错字很常见?
更新:问题是为什么它在 VS 中有效?