【发布时间】:2012-05-18 16:27:12
【问题描述】:
#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 中工作?
【问题讨论】:
-
我不知道
std::string,但他们的预标准CString被设计成可以通过这种方式传递。如果编译器没有故意插入会导致崩溃的代码,我认为它实际上可以与 g++ 实现一起使用。 -
这里有问题吗?它是在问这个案例在 Visual Studio 中做了什么或没做什么,还是他们在 gcc 中做了什么?
-
Kevin:问题是为什么它可以在 VS 中工作?
-
stackoverflow.com/questions/6820330/… - 你尝试过发布模式吗?
-
好吧,给你。花园品种未定义的行为。
标签: c++ visual-c++ visual-studio-2012 std