c-const限定词从纯虚函数中消失
作者:互联网
这个问题已经在这里有了答案: > Top-level const doesn’t influence a function signature 7个
使用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对按值传递的参数的函数签名声明没有影响.
唯一的效果是,您无法在此方法的潜在定义内更改堆栈上的参数实例.实际上,仅将其放在此处就足够了,以防止在函数体内更改参数的实例.
标签:pure-virtual,c,const 来源: https://codeday.me/bug/20191011/1891187.html