【问题标题】:How to make a similar cast like 1LL with any other type?如何用任何其他类型制作类似 1LL 的演员阵容?
【发布时间】:2013-05-01 16:55:38
【问题描述】:

这有意义吗?

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

有没有一种捷径可以为其他类型(例如浮动)进行转换? 非常感谢!

【问题讨论】:

  • 不,没有意义。您是在谈论 1LL 或 1.0F 等文字中的类型后缀吗?

标签: c++ types casting


【解决方案1】:

从 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;
}

【讨论】:

    【解决方案2】:

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

    整数字面量可以不以任何内容结尾,LLLUULULL 给出 intlonglong longunsigned int、@ 的类型分别为 987654330@ 或 unsigned long long。如果你愿意,这些可以是小写的;如果需要表示值,实际类型可能比指定的更宽。

    浮点文字可以不以任何内容结尾,FL 分别给出 doublefloatlong double 的类型。同样,如果您愿意,这些可以使用小写。

    字符和字符串字面量可以无开头,uUL,分别给出charchar16_tchar32_twchar_t 的字符类型。字符串也可以以u8 开头,表示char UTF-8 编码的字符类型。

    如果您发现像 123_km 这样奇怪的东西比 kilometres(123) 更具可读性,您还可以定义自己的用户定义文字来制作任何类型的文字。我不明白这一点,但如果你有兴趣,有人发布了一个例子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      相关资源
      最近更新 更多