【问题标题】:This code is not compiling c++此代码未编译 c++
【发布时间】:2016-03-16 07:50:05
【问题描述】:

我有这个代码,但它不起作用,我正在使用 vs2010

#include <iostream>

using namespace std;

// Pass by value 
constexpr float exp(float x, int n)
{
    return n == 0 ? 1 :
        n % 2 == 0 ? exp(x * x, n / 2) :
        exp(x * x, (n - 1) / 2) * x;
};

有什么想法吗?

【问题讨论】:

  • 它应该做什么
  • 请包含您的编译器错误输出。
  • 当您尝试编译时,您会收到一条包含大量信息的消息。你读过吗?
  • vs2010 对 C++11 的支持非常有限,constexpr 是不支持的功能之一。升级你的编译器。
  • 很多压缩代码...要么编辑错误或/和拆分你的代码来调试它。

标签: c++ visual-studio c++11


【解决方案1】:

关键字 constexpr 是在 C++11 中引入并在 C++14 中改进的。这意味着不断的表达。像 const 一样,它可以应用于变量,以便在任何代码尝试修改该值时引发编译器错误。与const 不同,constexpr 也可以应用于函数和类构造函数。 constexpr 表示该值或返回值是常量,如果可能,将在编译时计算。 constexpr 整数值可以在需要 const 整数的任何地方使用,例如在模板参数和数组声明中。当一个值可以在编译时而不是运行时计算时,它可以帮助您的程序运行得更快并使用更少的内存。检查this

constexprvs2010 中受支持,但在vs2015 上受支持,请查看this 以了解vs 上支持的内容,实际上vs2010 并不完全支持支持C++11,所以你可以在这里更新你的编译器。

所以你可以在这里使用vs2015或者你可能不使用constexpr,你可以检查这个link看看constconstexpr有什么区别,所以如果可能的话使用const你可以用 constexpr 代替。

它们与上一个链接的主要区别是:

  • const 适用于变量,并防止它们在您的代码中被修改。

  • constexpr 告诉编译器这个表达式会产生一个编译时常量值,因此它可以用于数组长度、分配给 const 变量等地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 2014-06-02
    • 1970-01-01
    相关资源
    最近更新 更多