3

这有道理吗?

    static_cast<long long>(1) == 1LL
    static_cast<float>(1) =? 1F 

是否有一种捷径可以为其他类型(例如浮动)进行铸造?非常感谢!

4

2 回答 2

8

从 C++11 开始,您可以定义自己的文字。例如,您可以_F像这样定义文字:

float operator"" _F(unsigned long long l)
{
    return static_cast<float>(l);
}

int main()
{
    auto a = 1_F;
    static_assert(std::is_same<decltype(a), float>::value, "Not a float");
    return 0;
}
于 2013-05-07T16:38:58.933 回答
6

这个答案描述了 C++11。用户定义的文字和某些类型在该语言的历史版本中不存在。

整数字面量可以不以任何内容结尾,L, LL, U,UL或分别给出, , , , orULL的类型。如果你愿意,这些可以是小写的;如果需要表示值,实际类型可能比指定的更宽。intlonglong longunsigned intunsigned longunsigned long long

浮点文字可以不以任何内容结尾,也可以分别给出、F或类型。同样,如果您愿意,这些可以是小写的。Ldoublefloatlong double

u字符和字符串字面量可以不以、U或开头,分别L给出字符类型char、或。字符串也可以用 UTF-8 编码来表示字符类型。char16_tchar32_twchar_tu8char

如果您发现奇怪的东西(例如123_kmkilometres(123). 我不明白这一点,但如果你有兴趣,有人发布了一个例子。

于 2013-05-07T16:49:18.627 回答