【发布时间】:2013-05-01 16:55:38
【问题描述】:
这有意义吗?
static_cast<long long>(1) == 1LL
static_cast<float>(1) =? 1F
有没有一种捷径可以为其他类型(例如浮动)进行转换? 非常感谢!
【问题讨论】:
-
不,没有意义。您是在谈论 1LL 或 1.0F 等文字中的类型后缀吗?
这有意义吗?
static_cast<long long>(1) == 1LL
static_cast<float>(1) =? 1F
有没有一种捷径可以为其他类型(例如浮动)进行转换? 非常感谢!
【问题讨论】:
从 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;
}
【讨论】:
这个答案描述了 C++11。用户定义的文字和某些类型在该语言的历史版本中不存在。
整数字面量可以不以任何内容结尾,L、LL、U、UL 或 ULL 给出 int、long、long long、unsigned int、@ 的类型分别为 987654330@ 或 unsigned long long。如果你愿意,这些可以是小写的;如果需要表示值,实际类型可能比指定的更宽。
浮点文字可以不以任何内容结尾,F 或 L 分别给出 double、float 或 long double 的类型。同样,如果您愿意,这些可以使用小写。
字符和字符串字面量可以无开头,u、U 或L,分别给出char、char16_t、char32_t 或wchar_t 的字符类型。字符串也可以以u8 开头,表示char UTF-8 编码的字符类型。
如果您发现像 123_km 这样奇怪的东西比 kilometres(123) 更具可读性,您还可以定义自己的用户定义文字来制作任何类型的文字。我不明白这一点,但如果你有兴趣,有人发布了一个例子。
【讨论】: