Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 哪些右值有名称?_C++_C++11_Named_Rvalue - Fatal编程技术网

C++ 哪些右值有名称?

C++ 哪些右值有名称?,c++,c++11,named,rvalue,C++,C++11,Named,Rvalue,这个是具有名称的右值的罕见情况。5.1.1[expr.prim.general]p4中提到了C++0x FDIS: 否则,如果成员声明符声明类X的非静态数据成员(9.2),表达式this是可选大括号或等效初始值设定项中“指向X的指针”类型的PR值。不得出现在成员声明书的其他地方。(强调矿山) 还有什么其他的,如果有的话 布尔文本true和false是bool类型的PR值 nullptr是类型为nullptr\u t的PR值 从函数返回命名变量时,该变量在该表达式的上下文中变为xvalue,xva

这个
是具有名称的右值的罕见情况。
5.1.1[expr.prim.general]p4
中提到了C++0x FDIS:

否则,如果成员声明符声明类X的非静态数据成员(9.2),表达式
this
是可选大括号或等效初始值设定项中“指向X的指针”类型的PR值。不得出现在成员声明书的其他地方。(强调矿山)

还有什么其他的,如果有的话

  • 布尔文本
    true
    false
    是bool类型的PR值
  • nullptr
    是类型为
    nullptr\u t
    的PR值
  • 从函数返回命名变量时,该变量在该表达式的上下文中变为
    xvalue
    xvalue
    rvalue
    (根据§3.10/1)

  • 可能还有更多,但这些是我目前所能想到的(第三个是有问题的——它实际上是一个表达式,它是xvalue,但有一些类似于
    return x;
    (其中
    x
    是一个局部变量,您返回的是值,而不是引用),变量的名称是表达式。该名称实际上指的是一个glvalue,在表达式中,该值(但不是真正的名称)被转换为一个xvalue(这是一个右值)。

    一个突出的例子是枚举数

    enum arity { one, two };
    
    表达式
    one
    two
    是右值(更具体地说,是C++0x中的prvalue)。另一个是模板非类型参数

    template<int *P> struct A { };
    
    模板结构A{};
    

    表达式
    p
    也是一个右值(更具体地说,是C++0x中的一个PR值).

    第三点仅适用于由值返回的局部变量。即使如此,表达式仍然是左值,但有一种特殊的语言规则,它将对象视为由右值指定的对象。@FredOverflow:是的--我编辑了一段,提到它必须是局部变量才能应用任何这些值(正如我所说的,我同意第三个是有问题的)。从技术上讲,
    这个
    真的
    ,和
    假的
    都不是名字。它们是构成有效右值表达式的标记,恰巧看起来像标识符。用标准引号来支持这一点?(我知道你有一个,不要对我隐瞒!
    :)
    )@Xeo是5.1.1p8和14.1p6