正如我从C++ Primer,fourth edition
看到的那样,
“可能令人惊讶的是,虽然参数是函数内部的const,但是 编译器否则将fcn的定义视为我们将参数定义为普通int:“
void fcn(const int i) { /* fcn can read but not write to i */ }
void fcn(int i) { /* ... */ } // error: redefines fcn(int)
所以,如果我想定义两个函数,如下所示,
int func(const int i) {
return i;
}
int func(int i){
i++;
return i;
}
实际上,它们是两个不同的函数,但是当我编译它时,会有一条消息:error:redefinition of 'int func(int i)'
。我可以像这样定义它们吗?有没有替代方法?
答案 0 :(得分:1)
将值传递的参数(如int)复制到堆栈中, 那么如果你的函数需要一个' const int'作为一个参数,它不会改变从函数外部可以做的事情(它只是禁止你改变函数内部的值)。由于复制了参数,因此可以在const int上调用以int作为参数的函数(它不会修改参数,因为它获取了副本)。
因为从外面看不出任何差异'对于采用int和const int的函数之间的函数,编译器没有理由选择一个版本或另一个版本,这就是C ++规范声明它是相同函数的原因。
现在,如果你有一个带有引用f(int&)的函数和另一个带有const引用f(const int&)的函数,那么它是另一个故事:那么只有第二个可以用const调用int参数,如:
const int x=5;
f(x);
答案 1 :(得分:-1)
const只是修改了如何访问变量,它不会改变它的数据类型,只要编译器关注它们都是整数以及它们是如何存储的,无论是否可修改。 / p>
我看到的唯一解决方法是通过更改参数的数据类型来重载函数,可能是long,double,byte等。