【问题标题】:Passing pointer to a reference to pointer argument将指针传递给对指针参数的引用
【发布时间】:2015-06-01 06:48:55
【问题描述】:

我正在将旧代码从 Solaris 迁移到 Linux。我有很多函数接受对指针的引用作为参数,例如 -

static TYPE GetInstrument(const Item*& item);

现在,在调用这个函数时,我有很多结构,例如 -

int test(Item *l_item) {
    TYPE lval = GetIntrument((const Item*)l_item);
}

这无法编译和匹配函数定义。在这种情况下我们应该如何传递参数有什么建议吗?

【问题讨论】:

  • 请注意,您不是“将指针传递给对指针参数的引用”,而是对指向 const 的指针的引用。
  • 请注意,GetInstrumentreference 指向 const 的指针,它可能会产生副作用,例如更改引用的指针。请仔细阅读文档以了解为什么如果采用引用而不是指针。
  • @cppcoder 它失败,没有匹配的函数调用 GetInstrument(const Item*)。 juanchopanza 的回答确实有助于编译这个,但我不确定这样做是否正确。

标签: c++ pointers


【解决方案1】:

该函数需要一个指向const的指针的引用,因此只需转换为正确类型的引用

TYPE lval = GetIntrument(const_cast<const Item*&>(l_item));

我使用const_cast 而不是 C 风格的演员表来更清楚地表达意图。这也可以:(const Item*&amp;)l_item

【讨论】:

  • 如果被调用函数尝试写入l_item,您确定这不是未定义的行为吗?
  • @MattMcNabb 我不这么认为。 l_itemtest 中的局部变量。对该变量的引用正在传递给GetInstrument。但我想我一定是错过了什么!
  • 嗯,引用所指的类型与其所引用的变量不同。它也不是int y; int const &amp;x = y; 中的顶级常量,const 更深一层。 ISTR 有具体规定,这是可以的,因为它在某处说 T *T const * 必须具有相同的大小和表示等。
猜你喜欢
  • 2019-09-16
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 2016-11-07
  • 1970-01-01
  • 2021-02-19
相关资源
最近更新 更多