C/C++知识点之VS2010编译器工具cl对c++11标准支持情况测试
小标 2019-01-21 来源 : 阅读 2354 评论 0

摘要:本文主要向大家介绍了 C/C++知识点之VS2010编译器工具cl对c++11标准支持情况测试,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了 C/C++知识点之VS2010编译器工具cl对c++11标准支持情况测试,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

C/C++知识点之VS2010编译器工具cl对c++11标准支持情况测试

本文探讨了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
#include

std::functionreturnLambda() {
    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 版本间的对应关系。它们的对应关系如下:

C/C++知识点之VS2010编译器工具cl对c++11标准支持情况测试


然后查看我的cl版本为:

C/C++知识点之VS2010编译器工具cl对c++11标准支持情况测试

从上表中的数据我可以清楚地断定:我使用的cl版本确实就是VS2010自带的。这只能说明,虽然命名为VS2010,实际上它的推出可能要比2010年晚。
3 VS2010的cl对C++11支持的程度

知道了确实是VS2010后,下一个问题就需要知道它对C++11的支持程度。如果它能够完全支持,那么我阅读[第二版][2]的时候就直接使用cl就可以了,而不用转向g++。在MSDN网站上面有这个话题的详细介绍,请参见.

可以知道VS2010对C++11的支持能很有限,比如它就不支持Raw String,利用如下代码进行测试:

#include
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编译的结果分别如下:

C/C++知识点之VS2010编译器工具cl对c++11标准支持情况测试


证明了VS2010的cl不支持C++ 11的Raw String新特性。看来,在阅读接下来[第二版]的时候,我只有先使用g++ 3.9.3编译器了,因为现在不打算升级VS2010到VS2015或者其他的高一级的版本。
4 结束语

C++11新特性的出现,更加方便了程序员的工作,因为它融合了好多函数式语言的许多优点,将其他语言的优点融合进来。当然也带来了语言学习量的增大。不过没关系,它兼容C++98/03等,如果你不想学习C++11,完全可以不顾它。它的优点是编程更加方便、程序性能提升。对应C++语言的特性越来越多,那就只有需要什么就去学习什么,而不用全部都去学习。

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

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程