【问题标题】:C++11 used by default? [duplicate]默认使用 C++11? [复制]
【发布时间】:2018-12-20 13:05:11
【问题描述】:

如何知道我的 g++ 编译器是否默认使用 c++11?我的操作系统是 ubuntu 18.04.1。

zell@ubuntu:~$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.3.0-27ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.3.0 (Ubuntu 7.3.0-27ubuntu1~18.04)

【问题讨论】:

  • 你总是可以读到the documentation
  • 你可以打印出__cplusplus的值。
  • @Someprogrammerdude 如果脚本需要此信息怎么办?
  • 在我的 Lubuntu 18.04 上,使用 g++7.3: __cplusplus: 201703。

标签: c++ c++11


【解决方案1】:

这是--一个资源是gcc/g++ web page on C++ status and standards

  • g++ 4.8.1 及更高版本支持 C++11,我记得 g++-7 将其作为默认设置 我之前在该页面上看到过,但我现在没有看到...

  • g++ 6.1及以上根据页面默认为C++14

您当然可以使用通常的-std=... 标志进行切换并做出明确的选择。

【讨论】:

    【解决方案2】:

    我的方式(不依赖编译器):编译并运行以下程序

    #include <iostream>
    
    int main()
     { std::cout << __cplusplus << std::endl; }
    

    你会得到(假设是符合标准的编译器)

    • “199711”,用于 C++98

    • “201103”,用于 C++11

    • “201402”,用于 C++14

    • “201703”,用于 C++17

    【讨论】:

    • 不能在 Windows 上运行,仍然显示 C++98(已知问题)。
    • @MatthieuBrucher - 很难对抗......嗯......我的意思是......使用不符合标准的编译器
    • 宏可以,否则,对于 C++17,VS 比 gcc 或 clang 更符合标准(删除的东西是 VS,而不是 gcc 和 clang)。他们在合规性方面取得了巨大进步,现在与 gcc 和 clang 恕我直言。
    • VS2017 编译器标志/Zc:__cplusplus 可用于获得更正确的__cplusplus 宏。
    • @MatthieuBrucher - 有趣; std::unary_function 是对的(如果您正在编译 C++17: before 仅被弃用,因此应该被接受):g++(我在 WandBox 中尝试 9.0.0)和 clang++(8.0.0)都是接受它;对于std::auto_ptr 更复杂:clang++ 是正确的,因为在 C++14 之前接受它并在 C++17 中给出错误,g++ 在 C++14 和 C++17 中仅发出“不推荐使用的警告”(如此正确在 C++14 中;据我所知,在 C++17 中不兼容)。你是对的:在这一点上,g++ 和 clang++ 在 C++17 中不符合(据我所知)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 2014-02-16
    • 1970-01-01
    • 2019-05-07
    • 2014-03-02
    • 1970-01-01
    • 2016-04-25
    相关资源
    最近更新 更多