ISO/IEC 14882:2011之条款5.3——单目表达式

5.3 单目表达式


1、带有从右到左的单目操作符组的表达式。

    unary-expression:

        postfix_expression

        ++ cast-expression

        -- cast-expression

        unary-operator cast-expression

        sizeof unary-expression

        sizeof ( type-id )

        sizeof ... ( identifier )

        alignof ( type-id )

        noexcept-expression

        new-expression

        delete-expression

unary-operator: 下列之一

*  &  +  -  !  ~


5.3.1 单目操作符


1、单目*操作符执行间接引用:它所应用到的表达式应该是一个指向一个对象类型的指针,或是一个指向一个函数类型的指针,并且结果是对表达式所指向的对象或函数的一个左值引用。如果表达式的类型是“指向T的指针”,结果类型是“T”。【注:一个指向一个不完整类型的指针(除了cv void之外)可以被解引用。由此所获得的左值可以以有限的方式所使用(比如初始化一个引用【译者注:比如

struct MyTest ;

int main(void)
{
    MyTest *test = NULL;
    MyTest &t = *test;
}

】);该左值不能够被转换为一个纯右值,见4.1——注结束】


2、下列每个单目操作符的结果是一个纯右值。


3、单目操作符&的结果是一个指向其操作数的指针。该操作数应该是一个左值或一个qualified-id。如果操作数是命名某个类C带有类型T的一个非静态成员m的一个qualified-id,那么该结果具有“指向类C的类型T的成员的指针”类型,并且是指派C::m的一个纯右值。否则,如果表达式的类型是T,那么结果具有“指向T的指针”类型,并且是一个纯右值,它是所指派对象(1.7)的地址或是所指派函数的一个指针。[注:特别地,类型“cv T”的一个对象的地址是带有相同cv限定的“指向cv T的指针”。——注结束][

例:

struct A { int i; };
struct B : A { };
... &B::i ...        // 具有类型int A::*

——例结束][注:由一个mutable非静态数据成员(7.1.1)所构成的一个指向成员的指针并不反映与该非静态数据成员相关联的mutable指示符。——注结束]


4、一个指向成员的指针仅当使用了一个显式的&并且其操作数是一个没用圆括号封闭的qualified-id。[注:即,表达式&(qualified-id)]

你可能感兴趣的:(表达式)