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 關注
- 536 瀏覽
添加回答
舉報