首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >既然你已经知道变量应该是常量,为什么还要使用关键字const呢?

既然你已经知道变量应该是常量,为什么还要使用关键字const呢?
EN

Stack Overflow用户
提问于 2013-08-10 08:37:45
回答 7查看 6.5K关注 0票数 70

我正在阅读的许多书都使用关键字const,而不应该修改变量的值。除了向代码的读者指明,如果修改这个变量可能会导致错误(您可以使用注释来做这件事)之外,为什么需要将该关键字作为任何编程语言的一部分?在我看来,如果你不想修改一个变量,那就干脆不要。

有人能帮我澄清一下吗?

EN

回答 7

Stack Overflow用户

发布于 2013-08-10 08:39:34

它告诉编译器不应该修改变量,因此如果有人编写修改它的代码,编译器会将其标记为错误。

票数 21
EN

Stack Overflow用户

发布于 2013-08-10 20:25:13

下面是一个简单的C示例:

代码语言:javascript
复制
void PrintList(const struct List *l);
void SortList(struct List *l);
int  CmpList(const struct List *a, const struct List *b);
void AppendList(struct List *l, struct List *m);
void PushList(struct List *l, struct ListNode *n);
void PopList(struct List *l, struct ListNode *n);

在这里,我们有一个小的函数集,用于处理某种类型的节点列表。首先,在不知道函数名称的情况下,我们可以立即看到哪些函数以某种方式改变了我们的列表,哪些函数不会改变我们的列表。像在标准库中一样,const函数不会改变你的数据,也不允许你用它们改变你的数据。C编译器试图保持指向您传递给函数的数据的指针的const-ness。因此,在这种情况下,我可以合理地确定,当我进行运行时调试时,比较两个列表的功能不会破坏它们,因为我已经保护自己不会意外地修改我的数据。;)

票数 6
EN

Stack Overflow用户

发布于 2013-08-10 18:05:49

您的编译器可以进行大的优化,因为您知道变量不会被更改:它不是存储在内存中,而是直接写入可执行操作码。

例如:如果你有a和b,你想把它们相加,你就得到a+ b。如果你声明a为常量,并且取值为3,那么程序将改为3+b,这将节省内存和周期,因为它不需要检索a值。

问题是你的编译器不能提前知道变量是不是常量,当然它可以分析整个代码并检查你是否修改了这些变量,但这不是100%确定的,因为未来的代码也可以修改它。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18157523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档