假设我们有这样一个函数
void something(int a)
{}
在main函数中,我们这样做
int main()
{
const int a=7;
something(a);
}
会被认为是错误吗?
No.
调用函数时,生成形参的副本:
const int x = 0;
something(x);
类似于
const int x = 0;
int y = x; // completely fine, no error
进一步,考虑当按值传递时,在参数上使用const
只在函数内部起作用:
void something(const int a)
{
a = 42; // error, a is const
}
虽然函数的类型实际上是void(int)
,即参数上的const
是一个实现细节。
当你通过引用传递时,这很重要:
void foo(int& x); // <- modifies parameter
const int x;
foo(x); // error, because x cannot be modified