[英]Is static_cast<int>(long long) safe?
static_cast<int>(long long)
安全(保證的行為)嗎?
還是我應該先static_cast<int>(val & 0xffffffffLL)
?
這是安全的,但是可以定義實現。
第一,
4.8積分轉換[conv.integral]
1 整數類型的prvalue可以轉換為另一種整數類型的prvalue 。 可以將無作用域枚舉類型的prvalue轉換為整數類型的prvalue。
3如果目標類型是帶符號的,則該值可以用目標類型表示,則該值保持不變; 否則,該值是實現定義的。
現在,
3.9.1基本類型[basic.fundamental]
2有五種標准的帶符號整數類型:帶
signed char
,short int
,int
,long int
和long long int
。 在此列表中,每種類型提供的存儲量至少與列表中位於其前面的類型相同。 也可能有實現定義的擴展有符號整數類型。 標准和擴展的有符號整數類型統稱為有符號整數類型。 普通整數具有執行環境46的體系結構建議的自然大小; 提供其他有符號整數類型以滿足特殊需要。46)
int
還必須足夠大,以包含在頭文件<climits>
定義的[INT_MIN, INT_MAX]
范圍內的任何值。
這意味着, long long
至少與int
一樣大。 如果它們的大小相同,則它們之間的轉換將不起作用。 如果long long
更大,則它是實現定義的,但我從未見過實現,除了根據大小取前n
個字節外,它還可以做其他事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.