数字字面值操作符错误

Numeric literal operator error

本文关键字:错误 操作符 字面值 数字      更新时间:2023-10-16

为什么这个代码:

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

似乎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为参数的运算符函数

添加定义

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