我们知道我们可以通过const引用将临时对象传递给函数,如下所示:
class A
{
public:
A(int _b = 0)
{
b = _b;
}
int b;
};
void foo(A& a) {printf("%d", a.b);}
void cfoo(const A& a) {printf("%d", a.b);}
int main(void)
{
//foo(A(4)); doesn't compile
cfoo(A(5));
}
但是通过指针传递怎么样? 为什么这会编译?
void pfoo(A* pa) {pa->b = 19;}
int main(void)
{
pfoo(&A(5));
}
答案 0 :(得分:3)
但是传递匿名变量指针呢?为什么这会编译?
您可能正在使用不符合C ++标准的编译器。
不能获取r值(临时)对象的地址。那不应该编译。
但是,operator&
可以重载,因此可以在临时对象上调用它,例如:
struct A
{
A* operator&() { return this; }
};
在C ++ 11中,临时对象可以绑定到r值引用。之后,r值引用的行为类似于l值,因此可以采用临时对象的地址:
struct A {};
void foo(A*);
void foo(A&& a) { foo(&a); }
int main() {
foo(A{});
}