12

为什么这段代码:

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

4

2 回答 2

13

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

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

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

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

于 2013-01-16T10:15:30.337 回答
8

添加定义

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

让它工作。

于 2013-01-16T10:20:38.837 回答