簡體   English   中英

(void)obj和void(obj)之間的區別

[英]Difference between (void)obj and void(obj)

根據http://en.cppreference.com/w/cpp/language/explicit_cast,C風格的演員和功能演員是等效的。 但是,請參閱以下示例:

#include <array>
int main() {
  std::array<int, 3> arr{};
  (void)arr;
  //void(arr);
}

雖然(void)arr編譯,但void(arr)卻沒有。 我錯過了什么?

如果沒有涉及的歧義(例如,具有相同名稱的其他函數,宏...), 則以下代碼聲明並定義兩個int變量

int a = 22;
int (b) = 33;

因此, 您正在嘗試創建一個void變量類型(具有現有名稱)

那是錯的,因為:

  1. 您正在嘗試創建一個void變量

  2. 您正在嘗試將現有名稱用於同一范圍內的另一個變量

雖然void(arr)通常與(void)arr相同,但在此上下文中它是一個定義,並且您嘗試創建一個名為arr的變量,該變量類型為void ,這是不允許的。

暫無
暫無

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

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