我找到了这段代码:
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/