【问题标题】:Is there any way to emulate compile-time double constant with MSVS2015?有没有办法用 MSVS2015 模拟编译时双常数?
【发布时间】:2015-04-08 23:13:09
【问题描述】:

我知道 MSVS2013(甚至 CTP)无法处理 static constexpr double 数据成员,正如 in this question 所证实的那样。

现在,我希望 MSVS2015 预览版至少可以让我使用这个简单的结构,但是很遗憾,我遇到了同样的错误。所以下一个合乎逻辑的问题是:有没有办法用 MSVC2015 定义编译时双精度常量?

例子:

template<typename T>
struct my_constant
{
  static constexpr const T value = 42;
}

这给出了错误:

error C2864: 'my_constant<double>::value': a static data member with an in-class initializer must have non-volatile const integral type

这是 C++03 的 mumbo-jumbo。

【问题讨论】:

  • 错误是什么?您是否错过了将变量名放在 T 之后?
  • @Hans 这也不起作用,因为 MSVC 只允许整数类型,如错误所示。出于性能原因,我需要编译时评估(因为实际代码正在计算旋转因子,而不是设置简单的常数)。有问题的代码是this FFT here的最终版本。
  • 嗯,不,在 VS2013 上运行良好。试试看。
  • @tenfour:它是 MSVC,它编译任何它编译的东西,没有-std 选项。
  • 链接器的工作是消除重复项。

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


【解决方案1】:

如果编译器接受 constexpr 成员函数

static constexpr T value() {return 42;}

那么这应该会给你一个编译时常量。

免责声明:我从不使用此编译器,因此无法对其进行测试。

【讨论】:

  • 我需要验证代码结果是否为常量,但至少可以编译。谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 2022-10-18
相关资源
最近更新 更多