如何在C++中定义最终变量(可变常量)?

Mat*_*nge 4 c++ final

如何在C++中定义一个指向可变对象的常量?

如果我宣布

static const CMyClass* IMPL;
Run Code Online (Sandbox Code Playgroud)

并指派

const CMyClass* CSomeClass::IMPL = new CMyClass;
Run Code Online (Sandbox Code Playgroud)

那我只能调用const对象上的函数.它的内部是锁定的.这不是我想要的.

如果我放弃const限定符,我可以重新分配指针IMPL,因此它不再被保护为常量,它应该是.final似乎只适用于C++中的函数.final在C++中是否有相当于Java的变量?

Rei*_*ica 10

你必须把它放在const声明中的正确位置.规则是:const适用于左边的东西,除非它适用于右边,否则它位于左边缘.

因此,这两个是指向常量整数的(可变)指针:

const int * p;
int const * p;
Run Code Online (Sandbox Code Playgroud)

这是一个指向(可变)整数的常量指针:

int * const p;
Run Code Online (Sandbox Code Playgroud)

这些是常量整数的常量指针:

const int * const p;
int const * const p;
Run Code Online (Sandbox Code Playgroud)


Leo*_*eon 6

class CMyClass{};

class CSomeClass{
    static CMyClass* const IMPL;
};

CMyClass* const CSomeClass::IMPL = new CMyClass;
Run Code Online (Sandbox Code Playgroud)

说明

const在C++中并不是Java的精确模拟final.

  • 在Java中,final说明符适用于变量,意味着无法重新分配变量(尽管仍可以修改该变量引用的对象).

  • 与此不同,在C++中const适用于该类型.由于C++具有指针,因此区分指针变量本身的类型和该变量将引用的对象的类型非常重要.取决于您放置const它的位置适用于前者或后者.其他答案更详细地阐述了这一点.

  • 你能不能加上一些评论......我认为他不明白这可以解决他的问题,因为他不知道他在看什么 (3认同)

gia*_*pot 5

1)指向const元素的指针: const T* ptr

2)const指向可变元素的指针: T* const ptr

3)const指向const元素的指针: const T* const ptr

你想要的是2):const指向一个可变元素的指针.