为什么stoi功能在Visual Studio 2010中可用

时间:2015-10-29 12:18:46

标签: c++ visual-studio gcc

我不明白为什么stoi功能来自<字符串>在Visual Studio 2010(Platform Toolset = v100)中可用,因为文档说这是C ++ 11的功能。

请有人帮我理解这个吗?

我想将它与GCC 4.4.7一起使用....这是我的初衷。

4 个答案:

答案 0 :(得分:2)

C ++ 11是2011年之前的一种选秀方式。由于stoi()将成为标准,许多编译器已经在C ++ 11最终确定之前添加了它。在C ++ 11最终确定之前使用C ++ 11特性是实验性的,因为一旦标准被批准,事情就会发生变化

正在运行

#include <iostream>
#include <string>
int main()
{
    int foo = std::stoi("5");
}

使用GCC 4.4.7在godbolt.org上进行编译,-std=c++0x进行编译,看起来您已经开始使用它了。

Live Example

答案 1 :(得分:1)

通常在采用最终版本之前很久就会讨论该标准。在讨论期间,出版了诸如标准工作草案之类的文件。

有时在采用标准的最终修订版之前已经足够清楚,因为C ++标准委员会的成员之间存在一致意见,所以标准中将包含一些功能。

答案 2 :(得分:1)

允许编译器提供扩展和库函数,这些函数不是它们所针对的C ++标准的一部分。虽然VC ++ 2010不完全符合C ++ 11标准,但它确实支持C ++ 11中的某些功能,而不支持C ++ 98,例如auto和{{1} }。

使用这样的“向前兼容”功能会涉及一定的风险,因为编译器发布后,编译器编写者所针对的标准草案可能已经改变,但是C ++ 11变得相当稳定了2010年,static_assert的规范在VC ++ 2010实施的最终标准中几乎肯定没有变化。

This page提供有关哪些VC ++版本支持哪些C ++ 11功能的信息。

答案 3 :(得分:0)

stoi不是一种语言功能(尽管VS2010已经为c ++ 11的某些功能提供了一些minimal support),但它是一个库函数。事实上,MS编译团队已经在那时实现了标准库中的功能。