什么场景可能需要使用 \ 需要指向 (non-const\const) 数据的 const 指针
What scenario might require the use \ need of const pointer to (non-const\const) data
我理解 Java 中的 final
或 C++ 中的 const
的概念,用于强制常量值并允许编译器对使用您编写的模块的任何人强制执行。
我看不出你想要一个 const
指针在哪里,为什么你不希望指针改变而不管数据是否不变:
例如
这是为什么?
char greetings[] = "Hello";
char * const p = greetings; // const pointer, non-const data
const char * const p = greetings; // const pointer and const data
我无法想象您要在其中保留指针常量的示例,它可能是用于文件句柄或类似的东西吗?或者只是指向您不想更改的对象的指针?
出于以下几个原因,您可能希望使指针本身保持常量:
- 帮助其他人理解您的代码 - 当您声明一个指针并将其设为常量时,您告诉读者您的函数的其余部分没有对该指针进行任何更改, 所以他们会更好地了解您如何使用指针。
- 帮助其他人维护您的代码 - 在您之后维护您的代码的其他人会更好地了解您希望使用指针做什么。如果他试图传递一个非常量引用或指向你声明的指针的指针
const
,编译器将捕获这个错误。
- 启用编译器优化 - 当编译器看到声明的内容时
const
,他们可以更积极地进行优化。
我理解 Java 中的 final
或 C++ 中的 const
的概念,用于强制常量值并允许编译器对使用您编写的模块的任何人强制执行。
我看不出你想要一个 const
指针在哪里,为什么你不希望指针改变而不管数据是否不变:
例如
这是为什么?
char greetings[] = "Hello";
char * const p = greetings; // const pointer, non-const data
const char * const p = greetings; // const pointer and const data
我无法想象您要在其中保留指针常量的示例,它可能是用于文件句柄或类似的东西吗?或者只是指向您不想更改的对象的指针?
出于以下几个原因,您可能希望使指针本身保持常量:
- 帮助其他人理解您的代码 - 当您声明一个指针并将其设为常量时,您告诉读者您的函数的其余部分没有对该指针进行任何更改, 所以他们会更好地了解您如何使用指针。
- 帮助其他人维护您的代码 - 在您之后维护您的代码的其他人会更好地了解您希望使用指针做什么。如果他试图传递一个非常量引用或指向你声明的指针的指针
const
,编译器将捕获这个错误。 - 启用编译器优化 - 当编译器看到声明的内容时
const
,他们可以更积极地进行优化。