我非常经常将指针作为函数参数传递给只读参数(例如结构体等)。例如在此构造函数中:
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/