小编sta*_*ats的帖子

Constexpr 变量和除法

我正在尝试使用 C++11 新的 constexpr 功能在编译时评估这个简单的表达式:

template <int a, int b>
class Test
{
   static constexpr double c = a / b;
};
Run Code Online (Sandbox Code Playgroud)

但这是 Clang 一直告诉我的:

Constexpr variable 'c' must be initialized by a constant expression
Run Code Online (Sandbox Code Playgroud)

奇怪的是,以下编译得很好:

template <int a, int b>
class Test
{
   static constexpr double c = a / 2.f;
};
Run Code Online (Sandbox Code Playgroud)

你们知道为什么 a/b 不是常量表达式,我怎么能在编译时评估它?

使用带有 -std=c++1y 和 -stdlib=libc++ 的 Clang 编译器

更新

以下示例导致原始代码出现错误:

Test<10,0> test1 ;
Run Code Online (Sandbox Code Playgroud)

尽管:

Test<10,1> test1 ;
Run Code Online (Sandbox Code Playgroud)

才不是。

c++ templates constexpr c++11

3
推荐指数
1
解决办法
818
查看次数

标签 统计

c++ ×1

c++11 ×1

constexpr ×1

templates ×1