3 回答
TA贡献1811条经验 获得超4个赞
((short)2)
是的,严格来说,这不是一个简短的字面量,更多的是强制转换,但是行为是相同的,我认为没有直接的方法。
那就是我一直在做的事情,因为我什么也找不到。我猜想编译器足够聪明,可以像编译短文字一样进行编译(即实际上不会分配int然后每次都强制转换)。
下面说明了您应该为此担心多少:
a = 2L;
b = 2.0;
c = (short)2;
d = '\2';
编译->反汇编->
movl $2, _a
movl $2, _b
movl $2, _c
movl $2, _d
TA贡献1797条经验 获得超6个赞
C ++ 11使您接近所需的内容。(搜索“用户定义的文字”以了解更多信息。)
#include <cstdint>
inline std::uint16_t operator "" _u(unsigned long long value)
{
return static_cast<std::uint16_t>(value);
}
void func(std::uint32_t value); // 1
void func(std::uint16_t value); // 2
func(0x1234U); // calls 1
func(0x1234_u); // calls 2
// also
inline std::int16_t operator "" _s(unsigned long long value)
{
return static_cast<std::int16_t>(value);
}
- 3 回答
- 0 关注
- 510 浏览
添加回答
举报