c++ - 如何定义指向 const 对象的可变指针?

标签 c++ pointers constants mutable

我有一个类,它包含一个指向类外部常量 VARIANT 值的指针,但有时我想更改此指针以引用类本身的 VARIANT 成员对象。

这个类的大多数实例都是常量,所以我必须将指针声明为可变的。

在 Visual C++ 中,这段代码似乎可以满足我的要求:

VARIANT mutable const* m_value;

但是,由于 mutable 是指针的属性而不是指针的属性,所以我认为这是正确的语法:

VARIANT const * mutable m_value;

类似于定义常量指针(而不是指向 const 对象的指针)的方式。不过,Visual C++ 不接受这种变体。

警告 C4518:“可变”:此处意外的存储类或类型说明符;忽略

Visual C++ 是否正确,还是我遗漏了什么?另一个更符合标准的编译器的行为是否会有所不同?

最佳答案

Comeau online在这里似乎同意 VC++。

这也是有道理的!一个类成员只能可变一次,不存在指向可变 const 对象的非 const 指针。 “可变常量对象”没有意义。

您应该将 mutable 放在声明的前面,因为它与例如 static 位于同一区域:

class A {
  static  int const* m_p1; // static modifiable pointer to a const object;
  mutable int const* m_p2; // mutable pointer to a const object
  ...
  mutable int *const m_p3; // DOES NOT MAKE sense

m_p3 没有意义 - 您同时将成员声明为“always mutabel”和“always const”。

关于c++ - 如何定义指向 const 对象的可变指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4104941/

相关文章:

c - 链接列表节点插入到前面 - 每次添加值时所有内容值都会改变

c++ - 是否可以重载一个可以从指针中分辨出固定数组的函数?

c - 这两个陈述有什么区别?

c - const 在这种情况下做什么 - const int *ptr;

c++ - 用 const : Different treatment for int and double 初始化 constexpr

c++ - `shared_ptr` 破坏了对象的常量性

c++ - 类内枚举

c++ - 头文件 C/C++ 中的符号

c++ - 创建静态库时,是否需要包含每个依赖项?

c++ - const 引用类成员是否会延长临时对象的生命周期?