消失使用gcc版本4.8.2:const修飾的純虛函數
我運行到哪裏對我的參數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 const_test | c++filt | grep getSum
我得到以下輸出:
0000000000400b60 W Derived::getSum(int)
爲什麼const在編譯時會從我的函數中消失?
@πάνταῥεῖ更準確地說,它*有一個含義(在函數內),但它不是簽名的一部分。 –
@Konrad Rudolph將其寫爲答案。 –
這是一種語言規則,函數參數的cv-qualifiers在重載解析時被忽略。 C++語言規範的第13.1節。 –