Const限定符从纯虚函数中消失
const qualifier disappears from pure virtual function
使用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
对按值传递参数的函数签名声明没有影响。
唯一的影响是,您不能更改该方法的潜在定义内部堆栈上的参数实例。实际上,只把它放在那里就足够了,以防止在函数体中更改参数的实例。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- C++ :: 设置值函数在函数内设置,但后跟 Get 函数,设置值消失了
- 为什么我在使用矢量的 push_back() 函数后元素消失了
- 在函数结束后仅释放 Segfault 与 vsnprintf 一起消失
- 继承函数中的参数消失
- 当我使用函数指针时,变量会消失
- Const限定符从纯虚函数中消失
- C++当我离开默认构造函数时,我的初始化字符串消失了,但我的其他成员变量值没有
- 在c++中使用system()函数导致命令提示符窗口出现和消失
- 从共享对象符号表中消失"extern C"函数C++