【发布时间】:2011-11-11 21:55:48
【问题描述】:
对于包含void foo(const int ) 类型声明的函数定义,以下两个声明均有效。
void foo(const int); // valid
void foo(int); // valid, const can be omitted.
但如果函数定义包含void foo(const int*) 类型的声明,则省略 const 是非法的:
void foo(const int *); // valid declaration
void foo(int *); // error: const cannot be omitted.
如果const的形参是指针类型,为什么在函数声明中不能省略const?有什么区别?
【问题讨论】:
-
编译器产生的错误是什么?您评估的微不足道的反例是 int main(int argc, char **argv);
-
我使用语法
int const n和int const * ptr来强调正在发生的事情。const直接应用于其左侧的事物,除非它是类型中的第一个单词,在这种情况下,它直接应用于其右侧的事物。当您说const int * ptr时,这与int const * ptr相同,当从右到左阅读时是:“ptr 是指向 const int 的指针”。如果你想让指针本身const,你会说int * const ptr。 “ptr 是一个指向 int 的 const 指针”。您可以更改该内存地址的值,但不能更改您指向的地址。