【发布时间】:2016-10-24 13:27:06
【问题描述】:
我是这样写的:
#define Parent C*
class C{
public:
Parent parent;
C():parent(NULL){}
};
void fun(Parent &p){
//condition..return;
fun(p->parent);
}
当我试图将引用参数设为常量以避免对被引用对象进行任何意外更改时,发生了一些事情。
第一:
我在Parent 之前添加了const,如下所示:void fun(const Parent &p)。但它不会在这一行编译 fun(p->parent);。
错误信息是:
Invalid arguments ' 候选者是:void fun(const C * &) '
那么:
我将const 的位置更改为:void fun(Parent const &p),突然之间,问题消失了。
为什么???有什么区别?
【问题讨论】:
-
只需自己完成预处理器的工作,并将 Parent 替换为 C*。看一下生成的代码就明白了!
-
如果您使用
typedef而不是#define,它会起作用。现在C和*是单独的项目,您左侧的const只会影响C。
标签: c++