簡體   English   中英

C ++:將uint32設置為int32(負值)

[英]C++: Setting a uint32 to an int32 (negative value)

我正在辯論是否可以擺脫編譯器警告。 警告來自將uint32與-1比較。

現在,僅看一眼這似乎是不明智的事情,因為uint32不應永遠是負面的,但我沒有編寫此代碼,也不熟悉c ++的工作方式,所以我問你。 這是一些示例代碼來說明正在發生的事情。

  bool isMyAddressValid = false;
  unsigned int myAddress(-1);
  unsigned int translatedAddress;

  if(isMyAddressValid)
  {
      translatedAddress = 500;
  }
  else
  {
      translatedAddress = -1;
  }

  myAddress = translatedAddress;

  if(myAddress == -1)
  {
      std::cout << "ERROR OCCURED";
  }
  else
  {
      std::cout << "SUCCESS";
  }`

那么這是有效的代碼嗎? 這是我不了解的Cism嗎?

unsigned類型設置為-1是將其設置為最大可能值的慣用方式,而不管該類型中的位數如何。

一個笨拙但也許更清晰的方法是寫

translatedAddresss = std::numeric_limits<decltype(translatedAddresss)>::max();

如果它在您的圖書館中,我將使用std::optionalboost::optional

該代碼根據標准是有效的,賦值和相等性檢查均在其操作數上應用整數轉換。 但是,使用哨兵值是C-ism,我將使用異常代替。

暫無
暫無

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

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