【发布时间】:2012-02-18 18:13:55
【问题描述】:
我只是想知道在执行期间进行函数调用的决定性因素是什么
超载。据我所知,它的参数签名,传递的参数数量
其中起着重要作用。但是是否还有 const 部分也起着重要的作用
是否参与超载。第一个和第二个函数的重载工作正常,但如果添加
在传递参数中以 const 作为特征的第三个函数,我得到编译错误。 int A::sum(int, int) and int A::sum(int, int) cannot be overloaded。只需给出类的代码 sn-p:
class A
{
private:
int x;
int y;
public:
int sum ( int a, int b )
{
cout << " Inside 1st ";
return (a+b) ;
}
int sum (int a ,int b) const
{
cout << " Inside 2nd ";
return (a+b) ;
}
int sum (const int a ,const int b)
{
cout << " Inside 3rd ";
return (a+b) ;
}
A(){x=0;y=0;}
~A(){};
};
当我声明普通对象并调用 sum 时,第一个函数被调用,如果是 const 对象,则调用第二个 sum。这完全没问题。但是,如果我编写第一个和第三个函数,这都会成为一个问题。为什么会这样?
【问题讨论】:
-
就像一个注释,当你声明一个函数为
void f(T);时,你可以定义它为void f(T const x) { /* ... */ }。换句话说,值参数的常量是一个实现细节,因为它只影响函数作用域内局部变量的常量,与函数的调用方式无关。跨度>
标签: c++ overloading