使用 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 在编译时从我的函数中消失?
最佳答案
你的函数签名
virtual int getSum(const int number) = 0;
实际上完全等同于
virtual int getSum(int number) = 0;
const
对按值传递的参数的函数签名声明没有影响。
唯一的影响是,您无法更改此方法的潜在定义内堆栈上的参数实例。事实上,只将其放在那里就足够了,以防止更改函数体中的参数实例。
关于c++ - const 限定符从纯虚函数中消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24290732/