【问题标题】:What is the differnce between "const X a" and "X const a" if X is the class如果 X 是类,“const X a”和“X const a”有什么区别
【发布时间】:2011-04-28 10:50:52
【问题描述】:

我有一个类名X,“const X a”和“X const a”有什么区别

【问题讨论】:

    标签: c++ variables constants


    【解决方案1】:

    什么都没有。

    const 限定符适用于紧靠其左侧的任何内容。如果它的左边没有任何东西,那么它适用于它右边的任何东西。

    【讨论】:

    • 但是const int *aint *const aconst int *const a是有区别的。
    • 最好将 A const x 写成与“右左”规则更好地协调
    • @Chubsdad:我个人更喜欢A const x 形式。但是很难说一个比另一个更好(它是那些风格的东西之一)。现在,如果您有一个很棒的理由,我很想听听(所以我也可以使用它)。
    • @Martin York:我也是!一件事是它与“右左规则”相一致。到目前为止,我遇到的另一个最佳原因来自 David Vandevoorde 的“C++ 模板”第 1.4 章。绝对值得一读它在模板/typedef 声明上下文中的优越性
    • 虽然我当然理解为什么有些人更喜欢 T const 而不是 const T 并且我看到了这种风格的潜在好处,但我一直觉得它很尴尬并且不习惯这样写.这很奇怪。
    【解决方案2】:

    在这种情况下,根本没有区别。

    当你有一个指针或一个引用时,一个可能看起来几乎相同的变化是重要的。给定类似的东西:

    T * a;
    

    const(或volatile)相对于星号的位置很重要:

    T const * a;
    T * const a;
    

    第一个说a 是指向const T 的指针(即,您不能修改a 所指的T 对象)。第二个说a 是一个指向(非常量)T 的常量——也就是说,您可以修改a 指向at 的内容,但不能修改指针本身,所以你不能将它指向不同的对象。当然,你也可以两者都做:

    T const * const a;
    

    这意味着您不能更改指针本身它所引用的T 对象。

    【讨论】:

      【解决方案3】:

      如果您使用简单的类型(嵌入式或自定义),那就看个人喜好了。

      在使用指针的情况下,有一个简单的通用规则:如果将 const 放在 '*' 之前,则指向的数据是常量,否则指针本身是常量,则不能更改其值。

      例如:

      const int  a=1;  // 'a' value can't be changed
      const int* q;    // the data that 'a' point to is constant
      int const* q;    // the same
      int* const p=&a; // the pointer is constant: const is behind '*'
      

      所以

      int b=2;
      p = &b; // error: trying to change constant pointer
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-02
        • 2021-06-21
        • 1970-01-01
        • 1970-01-01
        • 2019-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多