0

我们知道我们可以通过 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));
}
4

1 回答 1

4

但是传递匿名变量指针呢?为什么编译?

您可能正在使用不符合 C++ 标准的编译器。

不能获取 r 值(临时)对象的地址。那不应该编译。


但是,operator&可以重载,以便可以在临时对象上调用它,例如:

struct A
{
    A* operator&() { return this; }
};

在 C++11 中,临时对象可以绑定到 r 值引用。之后,r 值引用的行为类似于左值,因此可以获取临时对象的地址:

struct A {};

void foo(A*);

void foo(A&& a) { foo(&a); }

int main() {
    foo(A{});
}
于 2014-09-18T08:50:57.060 回答