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

我想通过引用(广义上,即通过A和或A *)传递类A的对象(称为a)给另一个类B的构造函数。我不想在内部修改'a' B('a'是只读的,它的大小很大,这就是为什么我要通过引用传递它)。 我知道两个选择:

1)通过'a'

const A & a_

2)通过'a'

const A * a_

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

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

我在下面的链接中看到了答案。 但我很好奇,如果除了那个问题上发布的内容之外还有其他选择。 在C ++中通过引用传递指针会带来什么好处?


通过const A &传递。

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

struct A { };

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

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

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

它有一个额外的被删除的构造函数,它接受右值引用,所以如果你尝试传递一个右值,那构造函数将赢得重载解析,并且你会得到一个错误。

你可以做同样的事情:声明const A&A&&构造函数,并删除后者。 那么没有人能够通过一个右值。


代码:

#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;
}
链接地址: http://www.djcxy.com/p/20729.html

上一篇: Passing by reference options in C++

下一篇: C++: Reasons for passing objects by value