双const声明

SyB*_*Ber 12 c++ const function

我经常看到以下函数声明:

some_func(const unsigned char * const buffer)
{

}
Run Code Online (Sandbox Code Playgroud)

知道为什么在指针名称之前重复const?

谢谢.

wic*_*ich 21

第一个const表示指向的数据是常量,可能不会更改,第二个表示指针本身可能不会更改:

char my_char = 'z';
const char* a = &my_char;
char* const b = &my_char;
const char* const c = &my_char;

a = &other_char; //fine
*a = 'c'; //error
b = &other_char; //error
*b = 'c'; //fine
c = &other_char; //error
*c = 'c'; //error
Run Code Online (Sandbox Code Playgroud)

  • @Eric我相信我已经包含了`b =&other_char; //错误 (3认同)

jus*_*ody 8

类型声明应该(?)读取RTL. const修改左边的东西,但规则很复杂,因为你可以写两个const T和T const(它们的意思相同).

  • T * const是一个指向可变T的常量指针
  • T & const将是对可变T的常量引用,除了引用根据定义是常量
  • T const *是一个指向常量T的可变指针
  • T const &是对常数T的引用
  • T const * const是常量指针T常量