【发布时间】:2021-07-28 14:21:00
【问题描述】:
您好,我正在阅读 C++ 中的表达式以及整个语句
声明 0.0
每个表达式都有一些非引用类型
引用的声明来自 en.cppreference.com/w/cpp/language/value_category。检查页面顶部的第 2 行。
现在我举了一些例子来理解这意味着什么。例如:
int i = 100; // this expression has type int
int &j = i; // this expression has type int or int&?
我的困惑是我知道 j 是对 int 的引用,即 j 是 int& 但根据引用的语句,每个表达式都有一个非引用类型将暗示 int &j = i; 具有 int 类型。它是否正确?
我感到困惑的其他示例:
int a[4] = {2,4,4,9};
a[3]; // will this expression be int& type or int type?
现在在a[3]; 语句中,我知道 a 是一个数组左值,因此 a[3] 返回一个对最后一个元素的左值引用。但是对引用的语句 0.0 是否意味着整个表达式 a[3]; 是 int 或 int& 类型感到困惑?
这是另一个例子:
b[4]; // Here assume that b is an array rvalue. So will this expression has type int&& or int?
所以我的问题是指针也会发生类似的事情吗?这意味着我们对指针也有类似的声明(0.0)吗?
int x = 34;
int *l = &x; // will this expression have type int* or int?
我现在这里 l 是一个指向 int(复合类型)的指针。如果没有类似的指针语句,那么引用语句需要什么?这就是为什么我们只去掉参考部分?
【问题讨论】:
-
引用的语句来自哪里?正如你所指出的那样,这似乎不是真的。
-
哪里是这样写的?可以分享一下链接吗?
-
引用的语句来自en.cppreference.com/w/cpp/language/value_category。检查页面顶部的第 2 行。
-
整个短语为:“每个表达式都有一些非引用类型,每个表达式恰好属于三个主要值类别之一:prvalue、xvalue 和 lvalue。”相反,这样做更有意义。
-
您引用的完整语句的两半由“and”连接,这意味着它们也应该分别有意义。 @al3c
标签: c++ c++11 reference c++14 language-lawyer