• [转]LINUX下编译c++11的代码


    转载地址: https://blog.csdn.net/lwb102063/article/details/50445201

    C++11,(即ISO/IEC 14882:2011),是目前的C++编程语言的最新正式标准。它取代了第二版标准(第一版公开于1998年,第二版于2003年更新,分别通称C++98以及C++03,两者差异很小)。新的标准包含核心语言的新机能,而且扩展C++标准程序库。C++11新标准由C++标准委员会于2011年8月12日公布,并于2011年9月出版。此次标准为C++98发布后13年来第一次重大修正。

        像C++这样的编程语言,通过一种演化的的过程来发展其定义。这个过程不可避免地将引发与现有代码的兼容问题,在C++的发展过程中偶尔会发生。不过根据Bjarne Stroustrup(C++的创始人并且是委员会的一员)表示,新的标准将几乎100%兼容于现有标准。关于C++11的新特性和一些版本变更请看:C++11-维基百科

        目前最新版本的GCC/G++是4.8,新版本的GCC支持最新的C++11标准,十分值得去使用&学习。 下面让我们在Ubuntu12.04 LTS用上GCC最新版本,去体验C++11新标准带来的东西吧!

    首先非源码编译式安装:

     

    1. sudo add-apt-repository ppa:ubuntu-toolchain-r/test  
    2. sudo apt-get update  
    3. sudo apt-get install gcc-4.8   
    4. sudo apt-get install g++-4.8  


    等GCC/G++下载并安装完以后,测试是否安装成功:

     

     

    1. gcc-4.8 -v  
    2. g++-4.8 -v  

    如果显示版本号表示安装成功:

    安装成功后我们如果要使用gcc-4.8和g++-4.8来编译的话,我们就得把gcc改为gcc-4.8,g++同理,改为g++-4.8来进行编译。

    此时使用gcc -v查看默认版本,为4.6版本:

     

    如果你想直接使用gcc-4.8而不改变编译时gcc改为gcc-4.8的话,我们就可以更改一下gcc的软链接:

     

    1. sudo rm /usr/bin/gcc  
    2. sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc  
    3. sudo rm /usr/bin/g++  
    4. sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++  

    现在我们用gcc -v来测试就能发现变为了4.8了!

     

     

    既然GCC-4.8使用了最新的C++11标准,但是我们为什么还是提示错误呢?解决方法如下:
    在编译的时候添加-std=c++11选项即可正常编译C++11标准的代码!

     

    我们可以写一个简单的例子来测试,这里用的是C++11新标准的范围for(Range for)语句,用来遍历给定序列中的每个元素:

     

    1. /*************************************************************************
    2. > File Name: test.cpp
    3. > Author: SongLee
    4. > E-mail: lisong.shine@qq.com
    5. > Created Time: 2014年03月23日 星期日 22时29分19秒
    6. > Personal Blog: http://songlee24.github.io/
    7. ************************************************************************/
    8. #include<iostream>
    9. #include<cstring>
    10. #include<cctype>
    11. using namespace std;
    12.  
    13. int main()
    14. {
    15. string str("some string");
    16. // range for 语句
    17. for(auto &c : str)
    18. {
    19. c = toupper(c);
    20. }
    21. cout << str << endl;
    22. return 0;
    23. }

    上面的程序使用Range for语句遍历一个字符串,并将所有字符全部变为大写,然后输出。其中auto类型也是C++11新标准中的,用来自动获取变量的类型。

    好了,接下来进行编译运行:

    g++ -o test test.cpp

    错误:

      error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
     #error This file requires compiler and library support

    提示错误:‘c’变量没有类型,范围for循环不允许在C++98标准中使用

    这是因为GCC/G++默认的-std(即C++语言标准)不是C++11,在这里默认的是C++98,所以需要显式地开启,即添加-std=c++11选项:

     

    g++ -std=c++11 -o test test.cpp


     

    编译成功!!!运行以后输出some string的大写形式!

  • 相关阅读:
    cart树剪枝
    LSA、LDA
    paddle中新增layer
    https://www.i5seo.com/
    打印机彩色打印设置(将彩色打印为黑色)
    办公文档的标准格式
    电脑常用的5个按键
    Win7各个版本之间的区别
    win7保护眼睛的颜色设置方法(85,125,205)
    详细教您台式电脑如何组装
  • 原文地址:https://www.cnblogs.com/qiuheng/p/9273823.html
Copyright © 2020-2023  润新知