我正在阅读C++ Primer,并且当表达式产生对象类型时,以及何时产生对象的引用类型时,我无法理解.
我从这本书中引用:
- 当我们将decltype应用于不是变量的表达式时,我们得到>该表达式产生的类型.
- 一般来说,decltype为表达式返回一个引用类型,这些表达式产生的对象可以位于赋值的左侧.
考虑以下代码:
int i = 3, *ptr = &i, &ref = i;
decltype(ref + 0) j;
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,表达式"ref + 0"导致添加ref引用的对象的值的固有操作,i和0.因此,通过第一个规则,表达式产生int类型.但是按照第二条规则,因为表达式产生的对象类型可以位于赋值的左侧(在本例中为int),所以decltype不应该产生对int(int&)类型的引用吗?
该书还说,对于以下代码
decltype(*ptr) k;
Run Code Online (Sandbox Code Playgroud)
k的类型为int&而不是int,表达式导致的类型.
它还表示对于一个赋值表达式,如下面的代码
decltype(a = b) l;
Run Code Online (Sandbox Code Playgroud)
l将在赋值操作的左侧具有对象的引用类型.
我们如何知道哪些表达式产生对象类型以及哪些表达式产生对象类型的引用?