【问题标题】:Numeric literal operator error数字文字运算符错误
【发布时间】:2013-01-16 10:08:11
【问题描述】:

为什么会有这段代码:

constexpr float operator "" _deg(long double d) {
    // returns radians
    return d*3.1415926535/180;
}

static const float ANGLES[] = {-20_deg, -10_deg, 0_deg, 10_deg, 20_deg};

产生 5 个这样的错误:

错误:无法找到数字文字运算符 'operator"" _deg'

我使用的是 GCC 4.7.3。 (arm-none-eabi-g++,带有-std=c++0x 标志)。

【问题讨论】:

标签: c++ c++11 user-defined-literals


【解决方案1】:

似乎 GCC 不使用用户定义的文字进行类型转换,例如-10_deg 中的 -10 被认为是一个整数。

.0 添加到所有数字,它应该可以工作:

static const float ANGLES[] = {-20.0_deg, -10.0_deg, 0.0_deg, 10.0_deg, 20.0_deg};

当然,您也可以添加另一个以int为参数的运算符函数。

【讨论】:

  • 不,但我尝试了类似的方法,它似乎解决了问题。你是对的 - GCC 没有在这里进行类型转换
【解决方案2】:

添加定义

constexpr float operator "" _deg(unsigned long long d) {
    // returns radians
    return d*3.1415926535/180;
}

让它工作。

【讨论】:

  • 是的,对于数字文字,熟文字的类型是 unsigned long long 用于整数文字或 long double 用于浮点文字。 wikipedia
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 2020-02-18
  • 2021-03-24
  • 1970-01-01
  • 2011-07-03
相关资源
最近更新 更多