使用gcc版本4.8.2:
我遇到了一个问题,当我编译代码时,我的参数上的const限定符正在消失。这是一个例子:
main.cc:
#include <iostream>
class Base
{
public:
virtual int getSum( const int number ) = 0;
};
class Derived : public Base
{
public:
Derived( const int& num )
: _myNumber( num )
{}
virtual int getSum( const int number )
{
return _myNumber + number;
}
private:
int _myNumber;
};
int main( int argc, const char* argv[] )
{
Base *b = new Derived( 2 );
std::cout << b->getSum( 3 ) << "\n";
}
编译如下:
g++ main.cc -o const_test
当我运行nm:
nm const_test | c++filt | grep getSum
我得到以下输出:
0000000000400b60 W Derived::getSum(int)
为什么const在编译时会从我的函数中消失?
答案 0 :(得分:4)
您的功能签名
virtual int getSum(const int number) = 0;
实际上完全等同于
virtual int getSum(int number) = 0;
const
对按值传递的参数的函数签名声明没有影响。
唯一的影响是,您无法在此方法的潜在定义内更改堆栈上的参数实例。事实上,它只是放在那里,以防止更改函数体中的参数实例。