簡體   English   中英

是static_cast <int> (長久)安全嗎?

[英]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 charshort intintlong intlong long int 在此列表中,每種類型提供的存儲量至少與列表中位於其前面的類型相同。 也可能有實現定義的擴展有符號整數類型。 標准和擴展的有符號整數類型統稱為有符號整數類型。 普通整數具有執行環境46的體系結構建議的自然大小; 提供其他有符號整數類型以滿足特殊需要。

46) int還必須足夠大,以包含在頭文件<climits>定義的[INT_MIN, INT_MAX]范圍內的任何值。

這意味着, long long至少與int一樣大。 如果它們的大小相同,則它們之間的轉換將不起作用。 如果long long更大,則它是實現定義的,但我從未見過實現,除了根據大小取前n個字節外,它還可以做其他事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM