在 C++ 中通过引用选项传递

Passing by reference options in C++

我想通过引用(在广义上,即通过 A& 或通过 A*)将 Class A 的对象(称之为 a)传递给另一个 Class 的构造函数B. 我不希望 'a' 在 B 中被修改('a' 是只读的,它的大小很大,这就是我想通过引用传递它的原因)。我知道两个选项:

1) 将 'a' 作为

const A & a_

2) 将 'a' 作为

const A * a_

选项 1 的缺点是我可能会错误地传递 r 值。选项2的缺点是我可能会错误地传递一个空指针。

我的问题是: 1)我对上述缺点是否正确? 2) 是否有另一种推荐的通过引用传递 'a' 的方法?

我在下面的 link 中看到了答案。但是我很好奇是否还有其他选项而不是该问题中发布的选项。 Are there benefits of passing by pointer over passing by reference in C++?

看看 std::reference_wrapper 的构造函数:http://en.cppreference.com/w/cpp/utility/functional/reference_wrapper/reference_wrapper

它有一个额外删除的构造函数,该构造函数采用右值引用,因此如果您尝试将右值传递给它,该构造函数将赢得重载决议并且您会收到错误。

您可以做同样的事情:声明 const A&A&& 构造函数,然后删除后者。那么没有人能够传入右值。

路过const A &

您可以通过声明该函数的右值重载来防止意外传递右值 = delete。例如:

struct A { };

void func(const A & a) { }
void func(A && a) = delete;

int main()
{
    A a;
    func(a);   // compiles
    func(A()); // doesn't compile
}

代码:

#include <iostream>
using namespace std;

struct A
{ };

int func_one(A& var) {
    A * insertVal=new A;
    if (&var==nullptr)
        return 0;
    else
        return 1;
}

int main() {
    A refVar;
    int x;
    x=func_one(refVar);

    return 1;
}