c++ - 为什么很少有人输入 const 正确的代码? const 正确的代码会编译得更好/更快吗?

标签 c++ c const-correctness

非常经常将指针作为函数参数传递给只读参数(例如结构体等)。例如在此构造函数中:

Chunk::Chunk(const string& text, COLOR * background, COLOR * foreground);

我过去更喜欢这种方式(不是常量正确的),因为我认为它更容易阅读。 然而,我开始觉得这很脏,所以改为:

Chunk::Chunk(const string& text, const COLOR * const background, 
                          const COLOR * const foreground);

一开始可能看起来更难理解,但只有当你习惯了它为止。我的问题:

为什么没有人做对呢? (我见过很少这样的代码) 编译得更好/更小/更快吗?

确实知道有什么区别,但我真的不在乎不同的语义,因为任何阅读代码的人都可以看到参数是只读的。 (谁会更改指针地址?)

确实知道我可以使用引用来代替,但我们假设我不想这样做(或者我使用纯 C 语言)。

最佳答案

在您列出的示例中

Chunk::Chunk(string text, const COLOR * const background, 
                          const COLOR * const foreground);

您可能还应该通过 const& 传递字符串,除非您有意想要该字符串的本地拷贝。另外,在我看来,颜色参数应该声明为 const COLOR * 而不是 const COLOR * const。第二个 const 只是表明该函数不会将背景和前景指针重新指向本地的其他内存块。它不会影响调用者,因此它是一个实现细节。因此,即使实现文件明确将它们列为 const COLOR * const header 中的原型(prototype)也应读取

Chunk::Chunk(string text, const COLOR *background, 
                          const COLOR *foreground);

关于c++ - 为什么很少有人输入 const 正确的代码? const 正确的代码会编译得更好/更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6947876/

相关文章:

c - 文件路径问题

我们可以减少 ESP IDF 锅炉板尺寸吗?

c++ - 在 C++ 中使用 const 的正确方法是什么?

c++ - 系统缓存与无缓存

c++ - 使用自定义删除器为 unique_ptr 返回 nullptr 失败

c++ - move 语义和 unique_ptr

c - 为什么这个递归函数会无限循环而不是反向打印数字?

c - 将指针传递给具有指向 const 指针的形式参数的函数时的未定义行为?

c++ - 具有引用语义的 Const 对象

c++ - 如何从 HMENU 获取菜单 ID?