说我有以下(非常简单)的代码。
#include <iostream>
int main() {
std::cout << std::stoi("12");
}
这在g ++和clang上都可以编译。但是,它无法在MSVC上编译,并出现以下错误:
错误C2039:“ stoi”:不是“ std”的成员
错误C3861:“ stoi”:找不到标识符
我知道这std::stoi
是<string>
标头的一部分,大概前两个编译器作为标头的一部分<iostream>
而后者没有。根据C ++标准[res.on.headers]
C ++标头可以包括其他C ++标头。
对我来说,这基本上说所有三个编译器都是正确的。
当我的一个学生提交作业时,这个问题就出现了,TA标记为未编译。我当然去修理了。但是,我想防止将来发生此类事件。因此,有没有一种方法可以确定应该包含哪些头文件,而无需在每次要检查的三个不同的编译器上进行编译?
我能想到的唯一方法是确保对于每个std
函数调用,都存在一个适当的include。但是,如果您现有的代码长数千行,则搜索起来可能很乏味。有没有更简单/更好的方法来确保交叉编译器的兼容性?
三种编译器的示例:https : //godbolt.org/z/kJhS6U
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句