数字文字运算符错误

Eri*_*ric 9 c++ user-defined-literals c++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};
Run Code Online (Sandbox Code Playgroud)

产生以下5个错误:

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

我正在使用GCC 4.7.3.(arm-none-eabi-g++-std=c++0x旗帜).

Som*_*ude 10

似乎GCC不使用用户定义的文字进行类型转换,因此例如-10in -10_deg被认为是整数.

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

static const float ANGLES[] = {-20.0_deg, -10.0_deg, 0.0_deg, 10.0_deg, 20.0_deg};
Run Code Online (Sandbox Code Playgroud)

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


Eri*_*ric 7

添加定义

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

使它工作.