数字文字运算符错误

时间:2013-01-16 10:08:11

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

为什么这段代码:

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标志)。

2 个答案:

答案 0 :(得分:10)

GCC似乎没有使用用户定义的文字进行类型转换,例如-10中的-10_deg被视为整数。

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

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

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

答案 1 :(得分:7)

添加定义

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

让它发挥作用。