使用“运营商&”在一个引用便携式C ++构造?

时间:2009-12-30 12:36:12

标签: c++ pointers reference

假设我有:

void function1( Type* object ); //whatever implementation
void function2( Type& object )
{
    function1( &object );
}

假设Type没有重载operator &()这个构造 - 在引用上使用operator & - 获取对象的实际地址(Type类型的变量)所有符合标准的C ++编译器?

3 个答案:

答案 0 :(得分:6)

是的,原因是在评估任何表达式的最开始时,引用被标准的5[expr]/6中定义的引用对象替换。这将使& - 运算符看起来没有任何区别:

  

如果表达式最初具有“对T的引用”类型(8.3.2,8.5.3),则在进行任何进一步分析之前将类型调整为“T”,表达式指定由引用表示的对象或函数,表达式是左值。

这使得任何操作表达式的操作符“透视”引用。

答案 1 :(得分:4)

是的,它需要引用的对象的地址。初始化引用后,对其进行的所有操作都将在引用的对象上执行。

这实际上是一个经常使用的比喻:

struct A {
    A( X & x ) : myx( &x ) {}
    X * myx;
};

答案 2 :(得分:2)

是,15个字符或更多。