在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