代码之家  ›  专栏  ›  技术社区  ›  Joseph D.

常量引用的正确语法

  •  1
  • Joseph D.  · 技术社区  · 7 年前

    我看到一些代码,如:

    Foo const& foo = val; // (A)
    const Foo& foo = val; // (B)
    

    只是位置不同 const

    虽然两者都可以,但我只想知道正确的语法。

    我从R中读到如下内容->L

    (A) foo是一个 常量 对类型的引用 Foo -不确定是否 val 常量
    (B) foo是对 常量 类型 Foo公司 -意义 val公司 常量

    假设引用不是对象,从技术上讲,所有引用都是 常量 (他们不能 提到 另一个对象),

    语法视角 ,is(A) Foo const& foo = val; 被认为是“令人困惑”的定义?

    只需使用以下选项即可:

    const Foo& foo = val; // referring to const Foo
    Foo& foo = val;       // referring to non-const Foo
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   Remy Lebeau    7 年前

    const 适用于其左侧的对象,除非没有任何内容,否则它将适用于其右侧的对象。

    这两种说法是 完全相同的 :

    Foo const& foo = val; // (A)
    const Foo& foo = val; // (B)
    

    它们的意思是一样的:

    foo 是非- 常量 (1) 对a的引用 const Foo 对象,并且正在初始化为对名为 val

    (1) :根据定义,引用一旦初始化就无法更改,因此 常量 vs非- 常量 并不真正应用于引用本身,因为它是隐式的 常量 但是 常量 适用于被引用的对象。

        2
  •  2
  •   Jarod42    7 年前
    Foo const& foo = val; // (A)
    const Foo& foo = val; // (B)
    

    两者都是相同的定义,只是风格问题: 对常量对象的引用。

    这将不同于:

    const Foo* fooC = nullptr; // (C)
    Foo* const fooD = nullptr; // (D)
    

    您不能重新分配 fooD 但你可以重新分配 fooC 。 指向的对象 fooC公司 无法通过修改 fooC公司 。 指向的对象 食物 可通过修改 食物

        3
  •  0
  •   Community CDub    4 年前

    它们在语法上是相同的。和

    我从R中读到如下内容->L

    (A) foo是一个 const 对类型的引用 Foo

    我想你读错了。应该是这样的

    Foo const &
    Foo/const/reference to
    

    然后您应该得到“参考const Foo”。因此,当从R->L读取时,(A)更清楚。