gpt4 book ai didi

c++ - list 常量与 C++ 关键字 "const"

转载 作者:可可西里 更新时间:2023-11-01 16:38:52 25 4
gpt4 key购买 nike

阅读 Meyers 的书(第 2 项“Prefer const to #define”)我想理解下面列出的一些句子:

  1. 引用 #define ASPECT_RATIO 1.653const aspect_ratio = 1.653 之间的比较,Meyers 提出“......在浮点常量的情况下(例如在这个例子中)使用常量可能会产生比使用 ​​#define 更小的代码。”问题是:Meyers 的代码越小,意味着可执行文件的磁盘空间越小?为什么变小了?我认为这在 32 位系统上可能有效,因为在这种情况下 int(或指针)需要 4 个字节和一个双 8 字节。因为 ASPECT_RATIO 可能不会进入符号表,所以名称会被值替换,而在其他情况下可能会使用指向唯一 double 值的 const 指针。在这种情况下,这个概念在 64 位机器上将不再有效(因为指针和 double 是相同的字节数)。我不知道我是否解释清楚我的意思,特别是这个想法是否正确?

  2. 然后 Meyers 问道:“...虽然好的编译器不会为整数类型的 const 对象留出存储空间(除非您创建对象的指针或引用)草率的编译器可能,而且你可能不愿意为这些对象留出内存……”在这种情况下,内存是执行过程占用的RAM吗?如果验证正确我可以使用任务管理器(在 Win 中)或顶部(在 Linux 中)?

最佳答案

首先,微优化是愚蠢的。不要关心几个常量 double 值会耗尽你所有的 RAM。它不会发生。如果确实如此,那就处理它,而不是在你知道它甚至相关之前。

其次,如果使用过多,#define 会产生严重的副作用,即使使用 ALL_CAPS_DEFINES 约定也是如此。迟早你会错误地制作一个用在其他变量名称中的短宏,预处理器替换会给你一个深不可测且可以避免的错误,并且根本没有可调试性。正如问题评论中的链接问题所述,宏缺少 namespace 和类作用域,并且在 C++ 中肯定是不好的。

第三,C++11 添加了 constexpr,它允许类型安全的宏性能(不管这个用词不当应该是什么意思)常量表达式。甚至还有一些(请参阅 SO Chat 中的 C++ Lounge)在编译时使用 constexpr 进行整个计算。不幸的是,并非所有声称支持 C++11 的主要编译器实际上都支持真正有用的足够多的 C++11 功能(我正在看着你,MSVC2012!)。

关于c++ - list 常量与 C++ 关键字 "const",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14140506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com