将发送一个const到一个函数,得到一个非const参数被认为是一个错误?



假设我们有这样一个函数

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

相关内容

最新更新