相关疑难解决方法(0)

为什么不"0xe + 1"编译?

看看这段代码:

int a = 0xe+1;
Run Code Online (Sandbox Code Playgroud)

Clang,gcc,icc不编译这个:

t.cpp:1:12: error: invalid suffix '+' on integer constant
Run Code Online (Sandbox Code Playgroud)

MSVC成功编译.

哪个编译器正确?如果clang和gcc是正确的,为什么会发生这种情况?

注意:如果我之前添加空格+,代码将编译.如果我换0xe0xf,它也会编译.也许这必须用指数表示法(比如1.2e+3)做一些事情?

c++ syntax integer literals language-lawyer

23
推荐指数
1
解决办法
455
查看次数

使用用户定义的文字成员时编译错误

编译此代码时(没有任何标题)

template <typename T>
struct Temperature {
    T temp;

    explicit Temperature(T t)
        : temp(t)
    {}
};

Temperature<long double> operator "" _f (long double t)
{
    return Temperature<long double>((t - 32) / 1.8);
}

int main()
{
    auto t = 100.0_f;
    t.temp;

    100.0_f.temp; // ERROR AT THIS LINE
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器(Ubuntu 14.04上的g ++ 4.8和clang ++ 3.4)都会抱怨

error: unable to find numeric literal operator ‘operator"" _f.temp’
     100.0_f.temp;
     ^
Run Code Online (Sandbox Code Playgroud)

似乎在_f.temp那里被视为后缀.为什么编译器会这样解析它,而不是停留在点?

c++ user-defined-literals c++11

11
推荐指数
1
解决办法
237
查看次数