草庐IT

linux如何查看编译器支持的C++版本(支持C++11、支持C++14、支持C++17、支持C++20)(编译时不指定g++版本,默认使用老版本编译)

Dontla 2023-04-22 原文

文章目录

C++各个版本

C++11

C++11是一个重要的C++标准版本,于2011年发布。C++11带来了许多重要的改进,包括:

  • 智能指针:引入了shared_ptr和unique_ptr等智能指针,用于更好地管理动态内存分配。
  • 新的循环语句:引入了for循环中的范围语法,以更简洁的方式遍历容器。
  • 初始化列表:允许使用初始化列表来初始化数组和结构体等数据结构。
  • Lambda表达式:允许在代码中直接创建匿名函数。
  • 多线程:引入了多线程库,用于简化多线程编程。

C++14

C++14:是C++11的一个小范围修订版本,于2014年发布,主要包括:

  • 增加了对可变参数的支持。
  • 增加了对类型推导的支持。
  • 提高了constexpr函数的限制。

C++17

C++17:是C++14的一个较大范围修订版本,于2017年发布,其中一些重要的改进包括:

  • 增加了新的文件系统库。
  • 支持了构造函数的默认参数。
  • 支持了结构体包含,简化了结构体的初始化。
  • 增加了对并行编程的支持。

C++20

C++20:是C++17的一个较大范围修订版本,于2020年发布,其中一些重要的改进包括:

  • 引入了模板参数推导。
  • 引入了协同程序,以简化异步编程。
  • 引入了模板类型推导,以简化模板编程。
  • 支持了关键字import,以简化模块的导入。

查看自己的编译器支持C++哪个版本

(浪潮服务器ubuntu20.04 gcc9.4.0)

  • 例如,检查是否支持C++11
g++ -std=c++11 -E - < /dev/null

这行代码是使用g++编译器来编译一段简单的C++代码,以检查您的系统是否支持C++11。
其中,-std=c++11选项告诉编译器使用C++11标准编译代码。
-E选项告诉编译器只进行预处理,而不进行编译和链接步骤。
最后,- < /dev/null表示将标准输入重定向到/dev/null,以便编译器不必读取任何输入。
如果命令行没有输出,则说明您的系统支持C++11。如果输出了错误信息,则说明您的系统不支持C++11。

  • 检查是否支持C++14
g++ -std=c++14 -E - < /dev/null

  • 检查是否支持C++17
g++ -std=c++17 -E - < /dev/null

  • 检查是否支持C++20(注意20要写成2a)
g++ -std=c++2a -E - < /dev/null

上面都是支持情况的打印,如果不支持,会提示什么呢?

(136盒子 ubuntu16.04 gcc5.4.0)

如图,这个环境不支持C++20

注意:编译时不指定g++版本,默认使用老版本编译(存疑)

如果在编译时不指定C++的版本,那么g++编译器会使用默认的C++版本。
一般情况下,默认的C++版本可能是比较老的版本,例如C++98或C++03。
因此,如果需要使用新的C++特性,比如C++11或C++14,最好明确指定版本。

但是具体默认使用哪个老版本编译,我一时半会找不到查看的方法。。。。

有关linux如何查看编译器支持的C++版本(支持C++11、支持C++14、支持C++17、支持C++20)(编译时不指定g++版本,默认使用老版本编译)的更多相关文章

  1. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  2. ruby-on-rails - 在 ruby​​ .gemspec 文件中,如何指定依赖项的多个版本? - 2

    我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这

  3. ruby-on-rails - 如果我将 ruby​​ 版本 2.5.1 与 rails 版本 2.3.18 一起使用会怎样? - 2

    如果我使用ruby​​版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby​​1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更

  4. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  5. ruby - Sinatra set cache_control to static files in public folder编译错误 - 2

    我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.

  6. ruby-on-rails - 如何在发布新的 Ruby 或 Rails 版本时收到通知? - 2

    有人知道在发布新版本的Ruby和Rails时收到电子邮件的方法吗?他们有邮件列表,RubyonRails有一个推特,但我不想听到那些随之而来的喧嚣,我只想知道什么时候发布新版本,尤其是那些有安全修复的版本。 最佳答案 从therailsblog获取提要.http://weblog.rubyonrails.org/feed/atom.xml 关于ruby-on-rails-如何在发布新的Ruby或Rails版本时收到通知?,我们在StackOverflow上找到一个类似的问题:

  7. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  8. ruby - 安装libv8(3.11.8.13)出错,Bundler无法继续 - 2

    运行bundleinstall后出现此错误:Gem::Package::FormatError:nometadatafoundin/Users/jeanosorio/.rvm/gems/ruby-1.9.3-p286/cache/libv8-3.11.8.13-x86_64-darwin-12.gemAnerroroccurredwhileinstallinglibv8(3.11.8.13),andBundlercannotcontinue.Makesurethat`geminstalllibv8-v'3.11.8.13'`succeedsbeforebundling.我试试gemin

  9. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  10. ruby-on-rails - 安装多个版本的 Rails 会覆盖以前的安装吗? - 2

    如果我一直输入geminstallrails使用不同版本的Rails会怎样?例如,我可以输入:geminstallrails--verson3.2.10或geminstallrails这给了我版本3.2.12。问题每次安装都会覆盖之前的吗?它会删除所有旧文件并添加我正在安装的新版本吗?或者如果我运行它两次,它会保留一些文件吗?我正在使用Ubuntu。 最佳答案 它将安装两个独立的gem。实际的可执行文件rails将调用最新版本。你可以覆盖它__例如,rails_3.2.10_将执行Rails3.2.10。bundler顺便说一下,如

随机推荐