C++关于参数为const引用类型的函数调用参数成员函数的一个问题
2012-03-04 22:53
731 查看
刚才遇到这么一个问题:
class Base
{
public:
Base(int b):a(b){}
void getMem()
{
cout << "Base = " << a << endl;
}
};
void MemFcn(const Base& item)
{
item.getMem();
}
当我把一个Base对象引用传递给MemFcn函数时,报错|error: passing ‘const Base’ as ‘this’ argument of ‘void Base::getMem()’ discards qualifiers
思考了一会,想到原来虽然传递的参数为const 引用,但是在函数体里面又调用了另一个函数,而这个函数(即getMem)可能会改变item的值,这与item声明为const是相互矛盾的。因此需要将getMem函数声明为const,以保证不会修改item的值。
所以应修改为:
class Base
{
public:
Base(int b):a(b){}
void getMem() const
{
cout << "Base = " << a << endl;
}
};
void MemFcn(const Base& item)
{
item.getMem();
}
class Base
{
public:
Base(int b):a(b){}
void getMem()
{
cout << "Base = " << a << endl;
}
};
void MemFcn(const Base& item)
{
item.getMem();
}
当我把一个Base对象引用传递给MemFcn函数时,报错|error: passing ‘const Base’ as ‘this’ argument of ‘void Base::getMem()’ discards qualifiers
思考了一会,想到原来虽然传递的参数为const 引用,但是在函数体里面又调用了另一个函数,而这个函数(即getMem)可能会改变item的值,这与item声明为const是相互矛盾的。因此需要将getMem函数声明为const,以保证不会修改item的值。
所以应修改为:
class Base
{
public:
Base(int b):a(b){}
void getMem() const
{
cout << "Base = " << a << endl;
}
};
void MemFcn(const Base& item)
{
item.getMem();
}
相关文章推荐
- C++ const类型引用做函数参数
- C++关于函数声明和定义中参数赋值为0调用问题演示
- 关于C++的右值、const引用、右值引用、const成员函数及相关扩展
- c++关于类型强转后作为引用参数的一些问题
- C++关于类成员函数在参数列表后加const的作用,以及使用条件
- C#中关于引用类型做参数时的若干问题及与C/C++对比
- const类型参数的对象引用和const成员函数
- 关于结构指针类型数组做函数参数的一个问题#include<stdio.h>typede
- 关于python函数传参数问题 , 不管什么类型都是传引用
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- C++ - 函数模板(function template)右值引用参数 问题 及 解决
- 函数调用,C# 调用Dll中非托管C++代码时,函数参数的类型对照
- 对象的引用调用private类型函数的问题
- 关于MFC中成员函数引用CDC的问题
- 关于c++中类静态成员函数可能破坏类封装性的问题
- C# 调用Dll中非托管C++代码时,函数参数的类型对照
- C/C++的区别(默认值、内联函数、函数重载、const、引用、参数、返回值)
- 关于 类成员函数返回指向const临时变量的引用
- 关于oracle存储过程调用问题。execute method error : DataAccessException,或者时参数个数或类型错误,等等
- 函数参数用指针或引用传递时发现的一个小问题