C++ 常量引用的正确语法
我看到一些代码,如:C++ 常量引用的正确语法,c++,reference,language-lawyer,C++,Reference,Language Lawyer,我看到一些代码,如: Foo const& foo = val; // (A) const Foo& foo = val; // (B) 只是常量的不同位置 虽然两者都可以,但我只想知道正确的语法 我从R->L中读到如下内容 (A) foo是对类型foo的const引用-不确定val是否为const (B) foo是对const类型foo-意思是val是const 假设引用不是对象,从技术上讲,所有引用都是常量(它们不能引用另一个对象) 语法透视图是(A)Foo const&F
Foo const& foo = val; // (A)
const Foo& foo = val; // (B)
只是常量的不同位置
虽然两者都可以,但我只想知道正确的语法
我从R->L中读到如下内容
(A) foo是对类型foo
的const
引用-不确定val
是否为const
(B) foo是对
const
类型foo
-意思是val
是const
假设引用不是对象,从技术上讲,所有引用都是常量(它们不能引用另一个对象)
语法透视图是(A)Foo const&Foo=val代码>被认为是一个“令人困惑”的定义
只需使用以下选项即可:
const Foo& foo = val; // referring to const Foo
Foo& foo = val; // referring to non-const Foo
两者都是相同的定义,只是风格问题:
对常量对象的引用
这将不同于:
const Foo* fooC = nullptr; // (C)
Foo* const fooD = nullptr; // (D)
您不能重新分配食物
,但可以重新分配食物
。
无法通过fooC
修改由fooC
指向的对象。
fooD
指向的对象可以通过fooD
修改
两者都是相同的定义,只是风格问题:
对常量对象的引用
这将不同于:
const Foo* fooC = nullptr; // (C)
Foo* const fooD = nullptr; // (D)
您不能重新分配食物
,但可以重新分配食物
。
无法通过fooC
修改由fooC
指向的对象。
fooD
指向的对象可以通过fooD
进行修改,它们在语法上是相同的。及
我从R->L中读到如下内容
(A) foo是类型foo
我觉得你读得不对。应该是这样的
Foo const &
Foo/const/reference to
然后你应该得到“参考const Foo”。所以当从R->L阅读时,(A)更清楚。它们在语法上是相同的。并且
我从R->L中读到如下内容
(A) foo是类型foo
我想你读错了,应该是这样的
Foo const &
Foo/const/reference to
然后你应该得到“对constfoo的引用”。因此,当从R->L读取时,(A)更清晰。const
适用于其左侧的对象,除非不存在任何内容,否则它将适用于其右侧的对象
这两种说法完全相同:
它们的意思是一样的:
foo
是对const foo
对象的非const
(1)引用,正在初始化为对名为val
的对象的引用
(1) :根据定义,引用一经初始化就不能更改,因此const
与非const
并不真正应用于引用本身,因为它是隐式的const
。但是const
确实适用于被引用的对象。const
适用于其左侧的对象,除非不存在任何内容,否则它将适用于其右侧的对象
这两种说法完全相同:
它们的意思是一样的:
foo
是对const foo
对象的非const
(1)引用,正在初始化为对名为val
的对象的引用
(1) :根据定义,引用一经初始化就不能更改,因此const
与非const
并不真正应用于引用本身,因为它是隐式的const
。但是const
确实适用于被引用的事物。这些不是类比。Foo const&Foo
的模拟值为Foo const*ptr
Foo*const ptr
将对应于Foo&const ptr
,这是不允许的。@rici:用指针替换引用,我没有说(D)与(A)或(B)相同((C)将是)。我只是想展示另一个放置const
的地方。由于Foo&const-Foo
无效,我用指针显示它。对const对象的引用
-准确地说,是对对象的const引用。这些不是类比。Foo const&Foo
的模拟值为Foo const*ptr
Foo*const ptr
将对应于Foo&const ptr
,这是不允许的。@rici:用指针替换引用,我没有说(D)与(A)或(B)相同((C)将是)。我只是想展示另一个放置const
的地方。由于Foo&const Foo
无效,我用指针显示它。reference to const object
-const reference to a object,准确地说,从语言的角度来看,它们是相同的。因为从语言的角度来看,它们是相同的,所以使用哪一个的问题就变成了基于观点的问题。因为从语言的角度来看,它们是相同的,使用哪一个的问题成为基于意见的问题。