C++11 *T的值类型是什么? 让我们考虑C++中非常短的代码: class T{ }; T *t = new T();

C++11 *T的值类型是什么? 让我们考虑C++中非常短的代码: class T{ }; T *t = new T();,c++11,C++11,什么是*t的类型?右值/左值/x值/glvalue?为什么? 提前感谢。左值的检查非常简单。它是否可以出现在赋值运算符的左侧 就你而言,答案是肯定的 *t = T(); 这是有效的。因此,*t类型的值是左值 由于它是一个左值,所以它也是一个glvalue 发件人: glvalue“广义”左值是左值或xvalue 我不明白。你是在问*t是什么类型的表达式吗?或者你在问变量t的类型是什么?这里已经回答过了,它也是一个glvalue。嗯,重载运算符=for t也可以用右值调用它,所以这个检查不是很准

什么是*t的类型?右值/左值/x值/glvalue?为什么? 提前感谢。

左值的检查非常简单。它是否可以出现在赋值运算符的左侧

就你而言,答案是肯定的

*t = T();
这是有效的。因此,*t类型的值是左值

由于它是一个左值,所以它也是一个glvalue

发件人:

glvalue“广义”左值是左值或xvalue


我不明白。你是在问*t是什么类型的表达式吗?或者你在问变量t的类型是什么?这里已经回答过了,它也是一个glvalue。嗯,重载运算符=for t也可以用右值调用它,所以这个检查不是很准确。@Quentin,true。“我确信OP没有看到那么深的东西。”我写得太快了。实际上,即使没有重载,它也能做到这一点,在restrospect中,这是显而易见的。。。So结构Foo{};Foo{}=Foo{};编译得很好。@Quentin,根据标准的严格定义,左值表示函数或对象。它没有说明物体的寿命。如果我们使用不精确的定义,即使是指定对象的临时对象,也应该被限定为左值。