`
youthie
  • 浏览: 1674 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

有关GCC4.7.0编译器对C++11(0x)标准的支持的讨论

阅读更多
近日想尝试一下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:读者有没有发现一些诡异的相似之处呢?
欢迎指正。
分享到:
评论

相关推荐

    各编译器对C++11的支持比较

    在 KlayGE 首次引入 C++11 特性之后,我顺便调研了一下个主流编译器对 C++11 的支 度,以便在下个版本中加入更多的 C++11 元素。这里还列出了在不支持的时候,可以采 的替代方案。主要参考了 C++11 Features in ...

    GCC编译器for c++

    GCC编译器,好东西

    gcc-4.7.0安装依赖库

    gcc4.7.0的详细安装手册可以参考如下网站http://hi.baidu.com/girlkoo/blog/item/04338a1ad54b29f5ac6e756a.html

    arm-linux-gcc交叉编译器7.3.1

    arm-linux-gcc交叉编译器7.3.1,适用 ARM -A9 等ARMV7-32的硬件环境,在Linaro官网下载最新版。此编译器是GNU版,按照官网说法是跑应用程序,不是跑裸机,跑裸机的编译器我也上传到我的号了,可以下载

    GCC编译器的源代码

    GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码GCC编译器的源代码

    GCC编译器配置 GCC编译器配置

    GCC编译器 C语言 C++语言 预处理 GCC开关 全局开关用来控制在“GCC功能介绍”中的GCC的4个步骤的运行,在缺省的情况下,这4个步骤都是要执行的,但是当给定一些全局开关后,这些步骤就会在 某一步停止执行,这产生...

    gcc 3.3 c c++ linux编译器

    gcc 3.3 c c++ linux编译器

    Keil5配置GCC编译器_Keil5配置GCC编译器_

    Keil5配置GCC编译器文档,Keil一般使用ARMCC编译MCU工程代码。

    Sales_item.h-gcc4.7.0.zip

    Sales_item.h的GCC 4.7.0 版本,适用于GCC 4.7.0或者更高版本的GCC Sales_item.h的GCC 4.7.0 版本,适用于GCC 4.7.0或者更高版本的GCC

    android编译器 gcc,g++,c/c++编译器和插件

    android gcc,g++,c/c++编译器和插件 内含说明书

    arm-linux-gcc交叉编译器 3.4.1

    arm-linux-gcc交叉编译器,版本3.4.1,用于Linux下的ARM开发。 安装方法: 1. tar zxvf arm-linux-gcc-3.4.1.tgz -C/ 2. 编辑 ~/.bashrc ,加入 export PATH=$PATH:/usr/local/arm/3.4.1/bin 3. 验证安装 [root@...

    内网环境下Linux环境gcc gcc-c++编译器安装所需依赖

    包含gcc gcc-c++ 编译器安装所需依赖包,用于C语言编写的程序在linux安装时的编译如nginx 执行rpm -Uvh *.rpm --nodeps --force 一键安装

    制作GCC交叉编译器

    本教程将详解如何在linux(构建系统)中构建一个交叉工具链, 可以运行在windows(主机系统)中, 但却为linux(目标系统)生成可执行文件elf.

    gcc最新编译器GCC编译器套件

    GCC编译器套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC原本作为GNU操作系统的官方编译器,现已被大多数类...

    离线安装GCC与GCC-C++

    离线安装GCC与GCC-C++

    C/C++标准的gcc编译器

    gcc编译器,GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。

    嵌入式基础:ARM下GCC交叉编译器的制作.pdf

    嵌入式基础:ARM下GCC交叉编译器的制作pdf,

    gcc编译器下载-4.6.0-Windows版

    gcc编译器是一款由GNU打造的编程语言编译器软件,支持处理C语言、Fortran、Pascal、Objective-C、Java等多种语言,实用性强,能够帮助用户进行高效的编译工作。gcc编译器是一套以 GPL 及 LGPL许可证所发行的自由软件...

    gcc和gcc-c++离线安装包

    从mini安装版centos7.5提取出来的gcc和gcc-c++安装包,下载后放到服务器解压,并cd到该目录,执行 rpm -Uvh *.rpm,安装完成后,运行gcc -v,g++ -v,会出现版本信息,则完成

    tdm64-gcc编译器,V10.3.0版本

    TDM-GCC-64是一个基于GCC的c++编译器,可以在Windows上进行C/C++语言编译。 TDM-GCC是非官方组织提供及维护的编译器集成包。TDM-GCC集成了最新的稳定版本的GCC工具集,以及一些实用的补丁。

Global site tag (gtag.js) - Google Analytics