C++*常量*常量
C++ * const *const
我试图搜索答案,但我发现很难找到这种"确切"的例子。我对指针对指针的理解很少,我觉得这里面有比指针对什么更重要的东西。
你们会怎么翻译?
void free(shame_1 * const * const group_1);
如果我把它翻译成const group_1指针到const pointer到shame_1,我是对的吗?
谢谢。
shame_1 * const * const group_1;
声明了一个名为group_1的变量,该变量的类型是指向shame_1-type对象的另一个const指针(相同)的const指针,该对象的值实际上可以更改。
因此,例如,您无法编译:
group_1 = nullptr;
*group_1 = nullptr;
然而,你可以这样做:
void f(shame_1& group) {
//stuff that modifies group
...
}
f(**group1);
正如zakinster所评论的,了解螺旋规则应该有助于你理解这种符号。
通常,只需从右向左读取:
void free(shame_1 * const * const group_1);
free
采用一个称为group_1
的参数,该参数是指向shame_1
对象的const
指针的const
指针。
- 这里没有关系,但从右到左阅读的主要麻烦是,有些人使用
T const *
,而另一些人使用const T*
,他们的意思是一样的,所以无论你看到T const
还是const T
,你都应该把它读成const T
。在代码中,只有指针是const
例如:
shame_1 a_shame;
const shame_1* p_a_shame = &a_shame;
free(&p_a_shame);
这里面没有什么用处。。。free()
本可以在没有额外间接级别的情况下接受指向shame_1
的const
指针,并且仍然能够对shame_1
做所有相同的事情,因此只有当free()
必须将const
指针传递给const
指针传递给其他函数时,这才有用(最终没有充分的理由造成整个混乱)。
您可以将内存使用/关系可视化为:
[a_shame] <------ [p_a_shame] <------ [group_1]*
- 这可能只在CPU寄存器中,尽管其他寄存器可能也在优化后
如果我把它翻译成const group_1指针到const pointer到shame_1,我是对的吗?
所以,对我来说,"const group_1指针"位有点可疑。。。我认为读起来更好的是"group_1是指向…的常量指针"或"指向…的const指针(称为group_1)">
相关文章:
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 通过多个头文件使用常量变量
- 在cuda线程之间共享大量常量数据
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 是默认情况下分配给char数组常量的值
- 私有类型的静态常量成员
- 类似枚举的计算常量
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我可以通过引用修改常量返回
- 如何创建长度由常量参数指定的数组
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 隐式常量/非常量运算符布尔
- 非常量变量只读位置的赋值
- constexpr构造函数需要常量成员函数时出现问题