【问题标题】:How do I make sure I am utilizing C++14?如何确保我使用的是 C++14?
【发布时间】:2016-10-15 22:09:18
【问题描述】:

我正在尝试编译从我正在阅读的一本书中获得的一些 c++,当我尝试编译时,我收到此警告,然后出现 5 个相关错误。

main.cpp:16:9: warning: variable templates are a C++14 extension 
[-    Wc++14-extensions]
int table<RecordType>::CAPACITY;
    ^

我从未考虑过更新 c++ 或确定我使用的是什么版本。我正在使用 g++ 在 mac 中编译它。

【问题讨论】:

    标签: c++


    【解决方案1】:

    您可以使用-std=c++14 标志启用它。但是,您的 GCC 版本应该首先支持它。直到GCC 4.9.3,您可以使用-std=c++1y,而从GCC 5.2 开始,它也支持c++14 标志。更多信息,请参考this

    【讨论】:

      【解决方案2】:

      传递-std=c++14 标志。还有一些旧版本支持部分 C++14,但还不支持-std=c++14;对于这些,请传递 -std=c++1y 标志。

      【讨论】:

        【解决方案3】:

        您需要告诉编译器要编译到哪个版本的标准。
        试试g++ -std=c++14

        【讨论】:

          【解决方案4】:

          虽然其他人推荐的 -std=c++14 将启用 C++14 功能支持,但它也会禁用一系列默认启用的功能,包括对高级 POSIX API 的支持。

          除非您特别想禁用 G++ 扩展,否则您应该使用 -std=gnu++14 而不是 -std=c++14

          【讨论】:

          • 我宁愿建议初学者通过-std=c++14 关闭扩展(并编写可​​移植代码),直到他们达到需要使用它们的地步。
          • @Pixelchemist:如果只是语言扩展,我会同意你的看法。但是可移植(单一 Unix 规范的一部分)库函数被关闭,因为头文件具有测试 _GNU_SOURCE(应该关闭)和 _XOPEN_SOURCE(不应该 -- 但它是)的保护。
          • 我的评论是:在可能的情况下,宁可使用标准 c++ 而不是扩展,并且仅在需要时才使用扩展(或者如果出于任何其他充分理由使用扩展)。我不认为 POSIX实际上是彻头彻尾的便携
          猜你喜欢
          • 1970-01-01
          • 2012-07-31
          • 2020-08-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-27
          • 1970-01-01
          • 2020-11-11
          相关资源
          最近更新 更多