C语言中的const关键字如何改写为一个长尾?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1149个文字,预计阅读时间需要5分钟。
在抽象的最高层次上,const 具有两项功能:一是保护你的数据(类似 private),二是向编译器暗示,这些标记为 const 的对象适合作为程序的数据段。换句话说,const 属性属于只读数据(ROM-able)。
在抽象的最高层次上,const做两件事:
* 一种保护你自己的方式(类似于private)
* 对编译器的一种指示,表明标记为const的对象适合于程序的数据段。换句话说,属于只读数据(ROM-able)。
可以通过例子来看下const的应用。第一个例子中,使用const覆盖了整个例子:
void fun(int i, std::string const & str) { i = 0; //ok. str = ""; //error! int const n = 42; n = 2; //error! }
第二种情况只适用于静态初始化的名称空间-作用域变量(又称全局变量):
int const pi = 3; //ROM-able std::vector<int> const ivec = {/* ... */}; //Not ROM-able, might allocate.
对声明为const的变量的任何写操作都被显示为未定义行为。这支持const全局变量在ROM中的位置。
如果一个变量定义在ROM中,对它的写操作很可能会使程序崩溃,这取决于平台。如果一个变量不在ROM中,对它的写操作只会改变它的值。这两种情况的结合就是为什么对const变量执行写操作的行为是未定义行为而不是错误。
本文共计1149个文字,预计阅读时间需要5分钟。
在抽象的最高层次上,const 具有两项功能:一是保护你的数据(类似 private),二是向编译器暗示,这些标记为 const 的对象适合作为程序的数据段。换句话说,const 属性属于只读数据(ROM-able)。
在抽象的最高层次上,const做两件事:
* 一种保护你自己的方式(类似于private)
* 对编译器的一种指示,表明标记为const的对象适合于程序的数据段。换句话说,属于只读数据(ROM-able)。
可以通过例子来看下const的应用。第一个例子中,使用const覆盖了整个例子:
void fun(int i, std::string const & str) { i = 0; //ok. str = ""; //error! int const n = 42; n = 2; //error! }
第二种情况只适用于静态初始化的名称空间-作用域变量(又称全局变量):
int const pi = 3; //ROM-able std::vector<int> const ivec = {/* ... */}; //Not ROM-able, might allocate.
对声明为const的变量的任何写操作都被显示为未定义行为。这支持const全局变量在ROM中的位置。
如果一个变量定义在ROM中,对它的写操作很可能会使程序崩溃,这取决于平台。如果一个变量不在ROM中,对它的写操作只会改变它的值。这两种情况的结合就是为什么对const变量执行写操作的行为是未定义行为而不是错误。

