本文探讨了VS2010编译工具cl对C++11标准的支持情况。提供了利用C++11新特性的两段代码来进行測试,并同g++ 4.9.3编译器的编译情况相对照。总的说来:VS2010的编译器工具cl部分支持了C++11标准,而g++ 4.9.3则所有支持C++11标准。

尽管如今已出现了C++14等新的标准。但熟悉了C++11标准的支持情况有利于我们正确选用符合自己须要的编译工具。

1. 问题产生

一个月前由于编写算法的而使用C++语言,看了一些英文版的算法设计和分析书。一个偶然的机会发现了C++11标准,而且很多不同的编译器已经全然支持该标准。

而且我利用g++ 4.9.3编译已经编写和实验了具有C++11特性的程序了,这是一个月前的事情。

由于电脑系统是Win7。我曲线救国,先安装Cygwin,然后在其上执行g++编译器。

忽然有一天,我发问:为什么要绕一个圈呢?我的电脑上早已经依照了VS2010,为什么不利用命令行编译工具cl.exe呢?于是,我转向使用cl来编译一些C++程序。在阅读[(Nicolai M. Josuttis, 1999)][1]的时候。我利用cl工具编译和执行了书中的绝大部分程序,由于数字解说的程序都符号C++98标准,VS2010中的cl必定能够编译C++98程序。在读[该书][1]的时候,去该书的站点寻找Errata表。却发现了该书已经出版了最新的[第二版][2],改版相对第一版添加了300多页。解说了C++11标准。我本人也正好想了解C++11标准。于是读完第一版后。找来第二版继续读。书中有以下的程序:

//lang/lambda1.cpp
#include <functional>
#include <iostream> std::function<int(int,int)> returnLambda() {
return [](int x, int y) {
return x*y;
};
} int main() {
auto lf = returnLambda();
std::cout << lf(6,7) << std::endl;
}

这是作者为了解说C++11的新特性而给出了样例。本来利用g++ 4.9.3确定能够编译此程序。出于惯性使然,我却继续使用VS2010中的cl来编译该程序。没想到,编译顺利成功。

C++11是2011年8月份新出的标准。而2010年的VS怎样能够支持它呢?难道是半年前的.net framwork的更新起作用了?带着这些疑问,我要把相关的问题探究清楚。

2 Visual Studio的具体的Compiler version

为了确定我当前使用的是否是真正的VS2010自带的编译器版本号,而不是更新后的VS2012的cl (由于我更新的仅仅是.net framework, 依照猜測,VS2010的可能性大些)。我须要清楚地知道VS版本号与cl compiler 版本号间的相应关系。它们的相应关系例如以下:

VS版本号 cl 版本号
2013 18.XX.YYYYY.ZZ
2012 17.XX.YYYYY.ZZ
2010 16.XX.YYYYY.ZZ
2008 15.00.30729.01
2005 14.00.50727.762
2003 13.10.6030

然后查看我的cl版本号为:



从上表中的数据我能够清楚地断定:我使用的cl版本号确实就是VS2010自带的。

这仅仅能说明,尽管命名为VS2010,实际上它的推出可能要比2010年晚。

3 VS2010的cl对C++11支持的程度

知道了确实是VS2010后,下一个问题就须要知道它对C++11的支持程度。

假设它能够全然支持,那么我阅读[第二版][2]的时候就直接使用cl就能够了,而不用转向g++。在MSDN站点上面有这个话题的具体介绍,请參见.

能够知道VS2010对C++11的支持能非常有限。比方它就不支持Raw String,利用例如以下代码进行測试:

#include <iostream>
using namespace std;
/*
*Name: rawString.cpp
*Purpose: Test whether VS2010 to support
* raw string, which is C++ new feature.
*/
int main() {
cout << R"nc(a\
b\nc()"
)nc";
}

採用cl 16.XX和g++ 4.9.3编译的结果分别例如以下:



证明了VS2010的cl不支持C++ 11的Raw String新特性。看来,在阅读接下来[第二版]的时候,我仅仅有先使用g++ 3.9.3编译器了,由于如今不打算升级VS2010到VS2015或者其它的高一级的版本号。

4 结束语

C++11新特性的出现,更加方便了程序猿的工作,由于它融合了好多函数式语言的很多长处。将其它语言的长处融合进来。

当然也带来了语言学习量的增大。

只是没关系,它兼容C++98/03等,假设你不想学习C++11,全然能够不顾它。

它的长处是编程更加方便、程序性能提升。相应C++语言的特性越来越多。那就仅仅有须要什么就去学习什么,而不用所有都去学习。

面对计算技术的迅猛发展,我们仅仅有持续学习。善于学习。才干跟上时代的步伐,拥抱和使用新技术。

[1]: Nicolai M. Josuttis. The C++ Standard Library A tutorial and Reference. 1999.

[2]: Nicolai M. Josuttis. The C++ Standard Library A tutorial and Reference. 2nd edition. Upper Saddle River, NJ, USA: Addison-Wesley, 2012.

VS2010编译器工具cl对c++11标准支持情况測试的更多相关文章

  1. Android NDK的C++11标准支持

    C++11于Android NDK它已被支持,本文介绍了如何NDK添加C++11支持标准. 在开源项目Cocos2d-x于,他已经加入C++11支持标准. 1.改动Application.mk文件,加 ...

  2. VS2010对c++11的支持情况验证

    目前仅仅测试工作中 使用的比较多的: 智能指针 shared_ptr #include <memory> std::shared_ptr<A> a(new A); ----支持 ...

  3. VS2010对C++11的支持列表(感觉大部分都不支持)

    c++11,就是之前的c++0x,已经成为了最新的c++标准.像咱这样天天用c++的,就赶紧follow一下.学习成果,放在这里,不说分享,至少自己增强下记忆. 首先,给出一些有用的链接. http: ...

  4. 移动測试技术保护源码!解码全球首款移动端白盒測试工具ThreadingTest (文章转自己主动点科技)

    作者 智晓锋 - 2014/07/14 自从斯诺登曝光美监听丑闻事件之后,我国政府就将信息安全问题上升到了国家安全的高度.基于此.国内的一家创业公司推出了智能型Android真机白盒測试以及开发辅助类 ...

  5. C++ Primer中文版(第5版)(顶级畅销书重磅升级全面采用最新 C++ 11标准)

    C++ Primer中文版(第5版)(顶级畅销书重磅升级全面采用最新 C++ 11标准) [美]Stanley B. Lippman( 斯坦利李普曼)  Josee Lajoie(约瑟拉乔伊 )  B ...

  6. 目前主流编译器对C++11特性的支持情况

    目前主流编译器对C++11特性的支持情况 1. GCC编译器(从编译器GCC4.8.X的版本完全支持) (1)目前C++11特性,之前成为C++0X特性,从GCC4.3的后续版本中逐步对C++11进行 ...

  7. C++11标准之右值引用(rvalue reference)

    1.右值引用引入的背景 临时对象的产生和拷贝所带来的效率折损,一直是C++所为人诟病的问题.但是C++标准允许编译器对于临时对象的产生具有完全的自由度,从而发展出了Copy Elision.RVO(包 ...

  8. g77介绍 g77 是 Fortran77 的编译器。它对 Fortran 77 标准提供完备的支持,并支持 Fortran 90 和 95 的部分特性。 由于 Fortran 77 标准在数值计算中的影响力,g77 可能是应用最广的Fortran编译器。 在 GCC 4.0 之前,g77 是 GCC 的一部分,但现在,g77 已经停止开发。

    GFORTRAN 维基百科,自由的百科全书     跳到导航 跳到搜索 此条目需要扩充. (2018年11月2日)请协助改善这篇条目,更进一步的信息可能会在讨论页或扩充请求中找到.请在扩充条目后将此模 ...

  9. <转>C++11标准后的C++阅读书目

    C++11标准后的C++阅读书目 C++ 新标准 C++11 的发布导致了大批新书的出现,还有一些经典书籍也进行了更新.Andrew Binstock 在 Dr.dobbs 上给大家推介一些学习 C+ ...

随机推荐

  1. ASP.NET Razor - C# and VB Code Syntax

    http://www.w3schools.com/aspnet/razor_syntax.asp Razor supports both C# (C sharp) and VB (Visual Bas ...

  2. [JavaEE] DWR框架实现Ajax

    Ajax是时下比较流行的一种web界面设计新思路,其核心思想是从浏览器获取XMLHttp对象与服务器端进行交互. DWR(Direct Web Remoting)就是实现了这种Ajax技术的一种web ...

  3. [源码管理] ubuntu中svn简明用法:服务器搭建+客户端使用

    本文是对网络上前人的优秀文章加以实践验证后所整理(修正或补充) 第一部分:svn服务器搭建(主要是四步走) 参考:http://www.son1c.cn/show/920.html 一,安装Subve ...

  4. tp框架---表单验证

    自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.分为静态验证和动态验证. 关于基础知识,请查看手册“自动验证”一章. 一.静态验证 ( ...

  5. BZOJ 1061费用流

    思路: 我们可以列出几个不等式 用y0带进去变成等式 下-上 可以消好多东西 我们发现 等式左边的加起来=0 可以把每个方程看成一个点 正->负 连边 跑费用流即可 //By SiriusRen ...

  6. 2015 多校赛 第二场 1002 (hdu 5301)

    Description Your current task is to make a ground plan for a residential building located in HZXJHS. ...

  7. 第九课: - 导出到CSV / EXCEL / TXT

    第 9 课 将数据从microdost sql数据库导出到cvs,excel和txt文件. In [1]: # Import libraries import pandas as pd import ...

  8. js-字符串方法

    字符串 遍历字符串 方法:(类似数组) 使用for 或 for… in      结果:得到字符串中的每个字符 查找字符 ²  charAt(索引值) 注: 超出索引值范围时,则返回空字符 ²  ch ...

  9. JdbcTemplate 增删查改

    准备工作:1,拷贝工具类JDBCUtils, 2,导入包commons-logging-1.2-javadoc.jar   spring-beans-5.0.0.RELEASE-javadoc.jar ...

  10. Shader的初步学习

    Shader 着色器 .shader 仅仅是渲染流水线中的一个环节,要想让shader发挥出它的作用,我们就需要知道它在渲染流水线中扮演什么样的角色. 渲染流水线的工作任务在于由一个三维场景出发.生成 ...