簡體   English   中英

C vs C ++中的數組衰減規則?

[英]Array decay rule in C vs C++?

為什么這個合法的C卻是非法的C ++?

int m[4][5];
int *p = m;

我認為C會通過將m遞減為int (*)[5]然后int *int *而走得更遠,在這里似乎C ++僅執行第一個遞減。

這不是合法的C。從現在的clang測試中:

example.c:2:6: warning: incompatible pointer types initializing 'int *' with an
      expression of type 'int [4][5]' [-Wincompatible-pointer-types]

指針類型之間的所有轉換( void *除外)都需要在C中進行顯式強制轉換。如果編譯器允許您使用更多內容,那不是它的語言標准。

根據規范6.5.4 Cast運算符 ,第3段:

除6.5.16.1約束所允許的地方外,涉及指針的轉換應通過顯式強制轉換來指定。

6.5.16.1是void *的例外。

暫無
暫無

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

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