6 c++ gcc clang visual-c++ c++98
的元问题提出了C++ 98级C++ 03的标签应作出的同义词.问题提问者跟着它进行了C++ 98标准的Is值初始化部分?如果没有,为什么它被添加到C++ 03标准中?,一个很好的问题,它揭示了向C++ 03 添加值初始化.考虑这个问题是后者的后续行动.
OP断言现代编译器不打扰区分C++ 98和C++ 03.这对我来说是令人惊讶的,因为事实证明是三个现代编译器的情况.虽然这个问题可以归结为"RTFM",但我的搜索还没有找到任何结论.
他们的标准页面:
最初的ISO C++标准作为ISO标准(ISO/IEC 14882:1998)公布,并由2003年出版的技术勘误表(ISO/IEC 14882:2003)进行了修订.这些标准分别称为C++ 98和C++ 03.GCC实现了大部分C++ 98(导出是一个值得注意的例外)和C++ 03中的大多数更改.要在GCC中选择此标准,请使用以下选项之一-ansi,-std = c ++ 98或-std = c ++ 03; ...
此外,他们的方言选项页面说:
在C++模式下,[ansi]相当于-std = c ++ 98.
并将"c ++ 98"和"c ++ 03"组合在一起:
1998 ISO C++标准加上2003年技术勘误和一些额外的缺陷报告.与C++代码的-ansi相同.
这似乎意味着没有办法只打开C++ 98模式.
我发现Clang唯一找到的就是他们的手册,它在C++语言特性下说:
clang完全实现了所有标准C++ 98,除了导出的模板(在C++ 11中被删除),...
没有提到C++ 03.它还指出:
clang支持-std选项,它可以更改clang使用的语言模式.C的支持模式是c89,gnu89,c94,c99,gnu99,c11,gnu11以及这些模式的各种别名.如果未指定-std选项,则clang默认为gnu11模式.早期模式支持许多C99和C11功能作为符合标准的扩展,并带有警告.
这当然是他们的C编译器,我无法在C++编译器上找到任何文档,例如哪些选项有效传递给它们-std.我只是假设Clang镜像GCC的方言选项(例如,C++ 03在Clang上有效),虽然没有证据我不能这么说.
据我所知,MSVC不允许你像上面两个那样改变语言标准.在MSDN上搜索"C++ 98" 并没有发现任何问题.看起来他们实现了C++ 98/C++ 11,例如Herb Sutter所说的.
虽然这些问题听起来很明显,元问题使我意识到,这是不那么明显.
有没有办法让GCC只符合C++ 98?在gcc中执行C++ 98标准只是链接到我所做的相同文档,而没有进一步考虑它是否真的符合C++ 98.
Clang是否符合C++ 98,或者它们是否符合C++ 03?我在哪里可以找到相关的文档?
MSVC也是如此.有没有办法改变MSVC中的语言标准,以便只符合C++ 98?
有没有办法让GCC只符合C++ 98?
不.您已完全覆盖了问题中的可用标记,但没有一个可以执行此操作.
Clang是否符合C++ 98,或者它们是否符合C++ 03?我在哪里可以找到相关的文档?
Clang实现了C++ 03减去export,就像GCC一样:
Clang实现了所有ISO C++ 1998标准(包括ISO C++ 2003标准中解决的缺陷),但导出(在C++ 11中删除)除外.
MSVC也是如此.有没有办法改变MSVC中的语言标准,以便只符合C++ 98?
不,如您所说,您无法在MSVC中指定C++版本.有一个编译器标志列表,它不是任何一个的功能.
C++ 03的重点是对C++ 98进行修正,从而有效地替换它,而不是将其作为一个新单元.想要"恢复"这些修复是没有意义的.这就像要求Windows 7 SP2 †启动进入Windows 7 SP1模式.它不是任何人都想要支持的模型.
† 虚构.
| 归档时间: |
|
| 查看次数: |
399 次 |
| 最近记录: |