gpt4 book ai didi

c++ - 在 Type::var 的情况下,范围解析运算符返回什么?

转载 作者:太空狗 更新时间:2023-10-29 19:39:12 24 4
gpt4 key购买 nike

考虑以下示例:

class A { int x; };

A::x 是什么?

  • 它不能是左值,因为它不引用存储位置。
  • 它不能是类型,因为类型将是 decltype(A::x)

最佳答案

事实上,它是一个左值。 [expr.prim.id.qual]/2 :

A nested-name-specifier that denotes a class [...] followed by the name of a member of either that class ([class.mem]) or one of its base classes, is a qualified-id [...]. The result is the member. The type of the result is the type of the member. The result is an lvalue if the member is a static member function or a data member and a prvalue otherwise.

虽然它在类成员访问表达式之外的使用受到 [expr.prim.id]/2 的严格限制,它尤其可以用于未评估的操作数,其中它的左值可以体现:

struct A {
int x;
};

void f(int &);

using p = decltype(&(A::x)); // p is int*; the parens prevents forming a pointer-to-member
using q = decltype(f(A::x)); // q is void

关于c++ - 在 Type::var 的情况下,范围解析运算符返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44280061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com