【发布时间】:2014-08-09 01:19:01
【问题描述】:
使用 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 会从我的函数中消失?
【问题讨论】:
-
@πάνταῥεῖ 更准确地说,它有一个含义(在函数内部),但它不是签名的一部分。
-
@Konrad Rudolph 把它写下来作为答案。
-
这是一个语言规则,函数参数上的 cv 限定符被忽略以进行重载解析。 C++ 语言规范第 13.1 节。
标签: c++ constants pure-virtual