對於包含類型爲void foo(const int)
的聲明的函數定義以下兩種聲明均有效。我可以在指針類型的聲明中忽略const限定符嗎?
void foo(const int); // valid
void foo(int); // valid, const can be omitted.
但是,如果一個函數定義包含類型的聲明void foo(const int*)
省略const爲ilegal:
void foo(const int *); // valid declaration
void foo(int *); // error: const cannot be omitted.
爲什麼const
不能在如果它的參數具有指針類型的函數聲明中省略?什麼改變了?
編譯器產生的錯誤是什麼?你評估的微不足道的反例是int main(int argc,char ** argv); – Erbureth
我使用'int const n'和'int const * ptr'來強調正在發生的事情。 'const'直接應用於它的左邊,除非它是該類型的第一個單詞,在這種情況下,它適用於右邊的東西。當你說'const int * ptr'時,這與'int const * ptr'相同,當從右向左讀時是:「ptr是一個指向const int的指針」。如果你想讓指針本身爲'const',你可以說'int * const ptr'。 「ptr是一個int指針的常量指針」。您可以更改該內存地址的值,但不能更改指向的地址。 –