Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 常量引用的正确语法_C++_Reference_Language Lawyer - Fatal编程技术网

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,准确地说,从语言的角度来看,它们是相同的。因为从语言的角度来看,它们是相同的,所以使用哪一个的问题就变成了基于观点的问题。因为从语言的角度来看,它们是相同的,使用哪一个的问题成为基于意见的问题。