c++ - 为什么我们将按引用传递的值视为地址?

标签 c++ syntax constructor pass-by-reference

我找到了这段代码:

foo::foo(const foo & arg) :
     impl_(new impl(*arg.impl_))
{};

据我所知,foo 类的构造函数将 foo 类的另一个对象作为唯一参数。我不清楚的是为什么我们在arg 前面使用*。据我所知,当我们通过引用传递参数时,我们应该将函数“主体”中的这个参数视为普通变量(而不是变量的地址,我们不应该使用*).

最佳答案

. 运算符的优先级高于间接 (*) 运算符,因此您的代码被解析为

*(arg.impl_)

impl_ 看起来是一个指针,因为你用 new 初始化了它。要调用复制构造函数,您必须传递一个对象,而不是一个指针,因此您需要事先取消引用它。

关于c++ - 为什么我们将按引用传递的值视为地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15815789/

相关文章:

c++ - ubuntu 13.04 上的 Eclipse C++ 插件

C++:按制表符拆分字符串,但包含空格

c++ - 打印 multimap<string, vector<string>>?

c - 在哪里可以找到奇怪的、特定的 C 语法规则?

c++ - new T(...) 与 std::make_unique<T>(...).release()

c++ - 无法将信号连接到自己类(class)的插槽

function -::(双冒号)代表什么?

JavaScript 数字属性语法

c++ - 如何使用非平凡构造函数构造静态 thread_local 成员

c++ - vector 构造函数标识为函数