不那么新的C++标准学习笔记 logo 不那么新的C++标准学习笔记

这是一份学习笔记,记录了我学习C++11/14/17过程中遇到的各种新概念、技术、思想等,仅供有限的参考,如有任何错误或其他意见和建议,欢迎留言指出,万分感谢。

C++98/03

标准文档可阅读ISO/IEC 14882

C++11

标准文档可参考最终版草稿N3337,它与正式版标准文档(N3338)仅有微小的差异。官方标准文档ISO/IEC 14882:2014 (2016)已合入C++14的内容。

MSVC可以直接支持编译C++11代码,GCC和Clang需要在命令行参数指定-std=c++11,如:

$gcc -std=c++11 -o test main.cpp
$clang -std=c++11 -o test main.cpp

C++14

标准文档可参考最终版草稿N4140,它与正式版标准文档(N4141)仅有微小的差异。也可购买ISO/IEC 14882:2014 (2016)

MSVC可以直接支持编译C++14代码,GCC和Clang需要在命令行参数指定-std=c++14,如:

$gcc -std=c++14 -o test main.cpp
$clang -std=c++14 -o test main.cpp

C++17(1z?)

标准文档可参考最终版草稿N4659

MSVC可以直接支持编译C++17代码,但只支持很少几个特性,GCC和Clang需要在命令行参数指定-std=c++1z,如:

$gcc -std=c++1z -o test main.cpp
$clang -std=c++1z -o test main.cpp

C++20(2a?)

截止到目前(2017-09-01),标准文档可参考草稿N4687

GCC和Clang需要在命令行参数指定-std=c++2a,如:

$gcc -std=c++2a -o test main.cpp
$clang -std=c++2a -o test main.cpp

注意

GCC和Clang除了以上-std=c++11, -std=c++14, -std=c++1z-std=c++2a选项外,还有对应的GNU版本-std=gnu++11, -std=gnu++14, -std=gnu++1z-std=gnu++2a,两者的区别在于后者多支持了GNU对C++语言的扩展,如果程序注意可移植性的话,比如需要用MSVC进行编译,则不应该使用GNU扩展

感觉不错,小额赞助一下!

Hosted by Coding Pages, 本站由 @missdeer 创建,由 Jekyll 于 2017-09-01 生成,感谢 CloudCannon 制作的theme: Edition ,感谢 Let's Encrypt 提供免费的SSL证书服务。本站点采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。© 2017