我想通过引用(广义上,即A&或A *)将A类对象(称之为a)传递给另一个B类的构造函数。我不想要'a'在B内修改('a'是只读的,它的大小很大,这就是我想通过引用传递它的原因)。我知道两个选择:
1)将'a'作为
传递{youtube}(.*){youtube}
2)将'a'作为
传递const A & a_
选项1的缺点是我可能错误地传递r值。选项2的缺点是我可能错误地传递空指针。
我的问题是: 1)我对上述缺点是对的吗? 2)是否有另一种推荐的方式通过引用传递'a'?
我在下面的链接中看到了答案。但我很好奇是否还有其他选项而不是该问题中的内容。 Are there benefits of passing by pointer over passing by reference in C++?
答案 0 :(得分:18)
通过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
}
答案 1 :(得分:4)
查看std::reference_wrapper
的构造函数:http://en.cppreference.com/w/cpp/utility/functional/reference_wrapper/reference_wrapper
它有一个额外删除的构造函数,它接受rvalue引用,所以如果你试图向它传递一个rvalue,那个构造函数会赢得重载分辨率并且你会收到错误。
您可以执行相同的操作:声明const A&
和A&&
构造函数,并删除后者。然后没有人能够传递一个右值。
答案 2 :(得分:-3)
代码:
#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;
}