近日想尝试一下C++的最新标准,于是在互联网上搜索了相关资料。
其中在开源中国社区看到了一段测试各个编译器对C++11标准支持程度的代码,链接如下:
http://my.oschina.net/u/186539/blog/58074
其中提到:
引用
//=====测试结果
测试标准:编译对测试代码不报错为支持,否则不支持
//1.Visual Studio 2010 SP1(中文旗舰版) 全部不支持
//2.MinGW 20120426 GNU GCC 4.6.2 支持前两个,不支持后两个
//(注意,编译时应该开启新特性 -std=c++0x 或者 -std=gnu++0x)
//命令: g++ TestCpp11_1.cpp -o TestCpp11_1 -std=c++0x
//3.MinGW Distro 9.0 GNU GCC 4.7.0
// 很高兴,全部支持
// (注意,编译时应该开启新特性 -std=c++0x 或者 -std=gnu++0x)
// 命令: g++ TestCpp11_1.cpp -o TestCpp11_1 -std=c++0x
//4.Visual C++ 6.0 SP6(中文企业版) 全部不支持
本人在实际测试时,发现该段代码不能通过编译(GCC4.6和GCC4.7,即使添加-std=c++0x),
需做出以下修改:
*第27行 is_r_value(std::move<int>(i));
改为 is_r_value(std::move(i));
原因:move()函数用不到模板。
*第43行 constexpr int GetFive() {return 5;}
改为:移动到main()函数之外;
原因:函数之内不能再定义函数。
*第47行 decltype(v[0])b;
改为 decltype(v[0])b=0;
原因:编译器要求初始化b,因为decltype(v[0])推断出的类型是const int &,是个引用类型;
以下摘自维基百科,
http://en.wikipedia.org/wiki/C%2B%2B11
引用
The type denoted by decltype can be different from the type deduced by auto.
#include <vector>
int main()
{
const std::vector<int> v(1);
auto a = v[0]; // a has type int
decltype(v[0]) b = 1; // b has type const int&, the return type of
// std::vector<int>::operator[](size_type) const
auto c = 0; // c has type int
auto d = c; // d has type int
decltype(c) e; // e has type int, the type of the entity named by c
decltype((c)) f = c; // f has type int&, because (c) is an lvalue
decltype(0) g; // g has type int, because 0 is an rvalue
}
BTW:读者有没有发现一些诡异的相似之处呢?
欢迎指正。
分享到:
相关推荐
GCC 4.7.0是其一个重要的版本,引入了对C++11标准的支持。在安装GCC 4.7.0之前,我们需要确保系统已经安装了必要的依赖库,以确保编译过程顺利进行。以下是对这些依赖库的详细介绍: 1. **MPC(Multiple Precision ...
在 KlayGE 首次引入 C++11 特性之后,我顺便调研了一下个主流编译器对 C++11 的支 度,以便在下个版本中加入更多的 C++11 元素。这里还列出了在不支持的时候,可以采 的替代方案。主要参考了 C++11 Features in ...
10. **C++新特性支持**:GCC随着C++标准的更新,不断添加对新特性的支持。例如,C++11引入了智能指针、右值引用、lambda表达式等,C++14和C++17进一步增强了这些特性,GCC通过`-std`选项可以选择不同标准。 总之,...
GCC是开源的,提供了对多种编程语言的支持,而G++是GCC的一部分,专门用于C++的编译。在Linux上,特别是对于服务器环境,比如安装Nginx这样的Web服务器,可能需要自编译源代码,这时就需要GCC和G++来完成编译过程。 ...
随着时间的推移,GCC推出了更多新版本,支持C++11、C++14、C++17等现代标准,增加了更多优化选项,如自动并行化、循环展开等。同时,现代GCC对多核处理器的支持也更加完善,能够生成更高效的代码。 四、在Linux环境...
而GCC-C++则是GCC中专门针对C++语言的编译器组件,它支持C++的各种特性,包括模板、异常处理、多态性等。 在离线环境下安装GCC与GCC-C++,通常是因为网络环境受限或者需要在隔离的系统中进行。以下是一个详细步骤的...
在Android平台上,开发C/C++应用或库时,我们经常需要用到GCC(GNU Compiler Collection)和G++(GNU C++ Compiler),它们是GNU项目的一部分,提供了对C和C++语言的编译支持。随着Android NDK(Native Development ...
arm-linux-gcc交叉编译器7.3.1,适用 ARM -A9 等ARMV7-32的硬件环境,在Linaro官网下载最新版。此编译器是GNU版,按照官网说法是跑应用程序,不是跑裸机,跑裸机的编译器我也上传到我的号了,可以下载
GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码
GCC 编译器是目前最流行的编译器之一,支持多种编程语言,包括 C、C++、FORTRAN、JAVA、OBJC、ADA 等。本文将详细介绍 GCC 编译器的安装步骤,以 Redhat Linux 上安装 GCC 4.1.2 为例。 GCC 编译器的安装步骤可以...
### GCC编译器配置详解 #### 一、GCC编译器简介 GCC(GNU Compiler Collection)是一套由GNU项目开发的编程语言编译器集合,主要用于C...此外,GCC还提供了丰富的文档和支持社区,帮助开发者解决各种编译相关的问题。
此外,GCC还支持C++11、C++14、C++17等新标准,这些标准引入了更丰富的语言特性和库,如Lambda表达式、右值引用、类型推断等,极大地提升了C++的灵活性和效率。 对于Fortran,GCC的GFortran编译器是科学计算领域的...
Fedora 14 中安装 arm-linux-gcc 交叉编译器 在 Fedora 14 环境中,安装 arm-linux-gcc 交叉编译器是一项重要的任务,以下是安装步骤的详细说明: 安装前的准备 在安装 arm-linux-gcc 交叉编译器之前,需要下载 ...
1. **获取编译器**:从提供的压缩包`gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf`中解压,这包含了一个完整的交叉编译环境。Linaro是一个开源组织,它提供了优化过的GCC版本,以提升ARM平台的性能。 2. *...
在GCC 4.7.0之后的版本中,`Sales_item.h`可能继续随着C++标准的发展而进化,支持更多的C++14、C++17甚至C++20特性,如变量模板、if constexpr、类模板的自动推导等,以保持与最新标准的兼容性,满足开发者的需求。...
对于C++,GCC同样引入了额外的特性,如对模板元编程的支持、对C++11新特性的预览等,使得C++编程更加灵活。 8. **GNU Objective-C runtime features(GNU Objective-C运行时特性)** 手册还介绍了GNU Objective-C...
1. C语言:GCC是C语言的标准编译器,支持C99和C11标准。 2. C++:GCC也支持C++,包括C++11、C++14、C++17和C++20等新标准。 3. Objective-C:对于苹果平台的开发,GCC可以处理Objective-C代码。 4. Fortran:对于...
GCC(GNU Compiler Collection)是开源的、多语言的编译器套件,支持多种架构,包括MIPS。 标题中的“Windows下的MIPS GCC交叉编译器”意味着我们将在Windows操作系统上使用GCC来编译针对MIPS架构的代码。这个环境...
在Linux系统中,`g++` 和 `gcc` 是两个非常重要的工具,它们是GNU Compiler Collection(GNU编译器集合)的一部分,用于编译和构建C++和C语言的程序。`g++` 主要针对C++编程语言,而`gcc` 则是针对C语言的,但同时也...
它默认集成了ARMCC编译器,但有时候开发者可能希望使用GCC编译器,因为GCC是开源且跨平台的,具有更广泛的社区支持和丰富的库资源。本篇文章将详细讲解如何在Keil5中配置和使用GCC编译器。 一、安装GCC编译器 首先...