为啥 stoi 函数在 Visual Studio 2010 中可用
Posted
技术标签:
【中文标题】为啥 stoi 函数在 Visual Studio 2010 中可用【英文标题】:Why stoi function is available in Visual Studio 2010为什么 stoi 函数在 Visual Studio 2010 中可用 【发布时间】:2015-10-29 12:18:45 【问题描述】:我不明白为什么 Visual Studio 2010 (Platform Toolset = v100) 中可以使用 中的 stoi 函数,因为文档中说这是 C++11 功能。
有人可以帮我理解这个吗?
我也想将它与 GCC 4.4.7 一起使用....这是我的初衷。
【问题讨论】:
编译器在 2015 年拥有各种 C++17 特性。 【参考方案1】:C++11 是 2011 年之前的一种草案方式。由于 stoi()
将使其成为标准,许多编译器在 C++11 最终确定之前已经添加了它。在 C++11 最终确定之前使用 C++11 功能是实验性的,因为一旦标准获得批准,情况可能会发生变化
跑步
#include <iostream>
#include <string>
int main()
int foo = std::stoi("5");
godbolt.org 和 GCC 4.4.7 和 -std=c++0x
确实编译,所以看起来你已经准备好使用它了。
Live Example
【讨论】:
感谢@Nathan 的解释。那么,stoi () 它在 Visual Studio 2010 中默认可用吗?不需要在项目属性中做任何规范? (或其他设置)。另一方面,对于 GCC,我需要向编译器指定-std=c++0x
@cristian 正确,您不需要在 MSVS(source) 中指定标准类型。使用 gcc 你确实需要,否则它默认为 C++03
内森,请回答后续问题。指定 -std=c++0x 与指定 -std=c++11 完全相同?有同样的效果吗?
@cristian 至少在 Godbolt -std=c++11
上会因 gcc 4.4.7 而失败
@cristian 查看更改发生时间:***.com/questions/16256586/…【参考方案2】:
允许编译器提供不属于他们所针对的 C++ 标准的扩展和库函数。虽然 VC++ 2010 不完全符合 C++11 标准,但它确实支持 C++11 中的某些功能,而 C++98 中没有,例如 auto
和 static_assert
。
使用像这样的“前向兼容”功能存在一定的风险,因为编译器编写者所针对的标准草案可能在编译器发布后发生了变化,但 C++11 变得相当稳定2010 年,stoi
的规范在最终标准中几乎可以肯定与 VC++ 2010 中的实现相比没有变化。
This page 提供有关哪些 VC++ 版本支持哪些 C++11 功能的信息。
【讨论】:
【参考方案3】:通常在最终版本被采用之前很久就对该标准进行了讨论。在讨论期间,诸如标准工作草案之类的文件将被发布。
有时在采用标准的最终修订版之前已经很清楚,某些特性将包含在标准中,因为 C++ 标准委员会的成员一致。
【讨论】:
【参考方案4】:stoi
不是语言特性(尽管 VS2010 已经有一些 minimal support 用于 c++11 的某些特性),而是一个库函数。碰巧MS编译团队当时已经在他们的标准库实现中实现了这个功能。
【讨论】:
以上是关于为啥 stoi 函数在 Visual Studio 2010 中可用的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 2022 中调试时,C++ 语言的子函数内“读取字符串字符时出错”,这是为啥?
为啥 Visual Studio 将新创建的数组键入为 Nullable?
为啥 Visual Studio 将新创建的数组键入为 Nullable?
c++ 函数模板的问题,请看代码,为啥去掉注释后,visual studio 2012会无法运行。
C++ 中的舍入值。为啥 printf、iostream 和 round 函数 [可能] 表现不同,具体取决于 Visual Studio 和 Windows 版本?