gpt4 book ai didi

c++ - decltype 和左值表达式

转载 作者:行者123 更新时间:2023-11-30 00:53:37 24 4
gpt4 key购买 nike

根据 http://en.cppreference.com/w/cpp/language/decltype

struct A {
double x;
};
const A* a = new A();

decltype( a->x ) x3;

匹配 1 个案例,即:

如果参数是对象/函数的未加括号的名称,或者是成员访问表达式(object.member 或 pointer->member),则 decltype 指定声明的此表达式指定的实体的类型。

但是这个注释:

if the name of an object is parenthesised, it becomes an lvalue expression

让我想到以下问题:如果 a->x 不是左值表达式,它的类型是什么?

我不明白为什么

decltype((a->x)) x4 = x3; // type of x4 is const double& (lvalue expression)

被评估为 const& 只是因为它被认为是左值表达式,没有真正看到链接。

最佳答案

lead me to the following question what is the type of a->x if it is not a lvalue expression ?

你只是糊涂了。

if the name of an object is parenthesised, it becomes an lvalue expression

应该是

if the name of an object is parenthesized, it is handled different by decltype.

括号内和非括号内的东西都是左值表达式。如果不加括号,则 decltype 不会检查表达式的类型,而是检查名称查找找到要引用的名称的声明所使用的类型(例如,它可能是 int&&如果名称查找将其解析为右值引用变量,但表达式的类型是 int 并且是 lvalue)。

关于c++ - decltype 和左值表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15965533/

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