![](/img/trans.png)
[英]Why are std::stoi and std::array not compiling with g++ c++11?
[英]Why do -ansi and -std=c++11 conflict in g++?
为什么 -ansi 和 -std=c++11 不能一起工作? (ANSI 根据其他答案恢复为 C++98)我使用的是 g++-4.8。
这是 C++11 的 ANSI 批准:
http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882-2012
这让我很困惑。 谢谢!
实时调频:
-ansi
在 C 模式下,这相当于-std=c89
。 在 C++ 模式下,它相当于-std=c++98
。
该标志是在标准有多个版本之前添加的,该标志仍然具有相同的含义。
你为什么要同时使用两者? 如果你想要-std=c++11
然后使用它,不要添加另一个表示其他矛盾的标志。
它们只是标志名称。 最好避免将任何东西称为“ANSI”,因为 1. 它们标准化了很多东西,2. 旧标准定期更新并进行有意义的更改,3. 他们没有特别参与我所知道的任何计算机语言,而是作为一些国际组织的成员参与,在 C++、ISO 的情况下。
当告诉编译器您想要哪种标准化语言方言时,请指定其标准化的年份,或者它可以做出的唯一假设是您想要第一个(最旧的)标准。 最初的标准化是唯一一个没有指定年份不会导致歧义的时间点。
说到歧义,根据文档, -ansi
是唯一的语言标志,其含义取决于 GCC 的调用。 gcc -ansi
表示 C89, g++ -ansi
表示 C++03。 就个人而言,我更喜欢更少的歧义而不是更多的聪明。
是的。 C 中的情况与 C++ 中的情况相同:ANSI 已经(几乎自动)采用了 ISO C 标准的每个版本,包括 C11: http ://webstore.ansi.org/RecordDetail.aspx?sku= INCITS% 2fISO%2fIEC+9899-2012 。 每个新标准都会“取消和替换”较早的标准,如您所见,官方的 ANSI 标准是 C11 和 C++11,较早的版本不再是有效的法律。 ANSI 标准是当前的 ISO 标准,句点。
因此,如果您想将--ansi
标志读取为指示 ANSI 当前采用的标准,则完全没有必要。
相反,C 和 C++ 上下文中的术语“ANSI”用于指代该语言的第一个标准化版本,之后才添加新功能。 这只是一种习俗,与所有习俗一样,不必具有字面意义。 这很方便,因为有些人(通常是普通的 C 或 C++ 用户)不太了解标准机构的工作,并认为 ANSI 的最后一个 C 标准确实是 1989 年的标准。这些人将依赖--ansi
标志,而我们其他人则使用正确的年份标记标准。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.