[英]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.