以 arg 为 'const arg *&' 的函数的参数转换
Posted
技术标签:
【中文标题】以 arg 为 \'const arg *&\' 的函数的参数转换【英文标题】:Argument conversion for function taking an arg as 'const arg *&'以 arg 为 'const arg *&' 的函数的参数转换 【发布时间】:2012-02-10 00:25:22 【问题描述】:这是我在恢复旧代码时遇到的问题
还有一个--
所以这里是一个函数的定义:-
int shen_get_entity_from_list(const ENTITY_LIST& list, const ENTITY*& e);
这是定义变量的方式
ENTITY *t_ent = NULL, *p_e = NULL, *s_e = NULL, *t_e = NULL;
现在当我调用这个函数时
s_pos = shen_get_entity_from_list(sortedACISfeatureList, s_e);
它给了我以下错误
错误 C2664:
'shen_get_entity_from_list'
:无法将参数 2 从'ENTITY *'
转换为'const ENTITY *&'
【问题讨论】:
只是出于兴趣:是否有理由将 const 引用传递给指针?没看懂 @Niklas :这不是对指针的 const 引用,而是对指向 const 对象的指针的引用。在函数可能修改指针但不修改指向对象的情况下,这是简单的 const 正确性(即,一件好事)。 @ildjarn:感谢您的精彩解释 :) 这些类型声明总是让我着迷。 【参考方案1】:s_e变量需要声明为:
const ENTITY* s_e = NULL;
匹配函数的声明。这表示在调用函数后您不会使用 s_e 指针来修改它指向的实体。
【讨论】:
【参考方案2】:引用不是已经是 const 类型了吗?并在创建时本身就需要价值?
不允许空指针引用。
由于所有这些,我觉得这个问题无法解决
【讨论】:
【参考方案3】:尝试移动常量:
int shen_get_entity_from_list(const ENTITY_LIST& list, ENTITY* const& e);
这为您提供了对所传递类型的 const 引用,而不是对指向 const ENTITY 的指针的非常量引用。
【讨论】:
嗯,但为什么一开始就不能转换参数呢? @NiklasB。因为如果shen_get_entity_from_list
将 e
更改为指向 const ENTITY 对象,那么在它返回 ENTITY* 后,您传入的 (s_e
) 将是指向 const 对象的非常量指针,违反了 const 规则。
@je4d:谢谢你的解释!以上是关于以 arg 为 'const arg *&' 的函数的参数转换的主要内容,如果未能解决你的问题,请参考以下文章
访问器函数采用 const arg 但在 C 中返回非 const 指针
"CONST func(arg);" 是啥意思在C语言中是啥意思?
使用 `struct S const char *array[ARG_MAX]; 避免来自 `struct S as[] = NULL;` 的段错误;`? [复制]