常量指针 vs 指针:C++

3

我是C++的新手,正在尝试弄清楚我应该做什么。

以下选项之间的性能有差别吗:

const DATATYPE* name

vs

DATATYPE* name

3
编译器可能有更多选项来优化const变量,但这只是const的最不重要的功能(而且你可能无论如何都不会注意到任何性能差异)。 - Yksisarvinen
1
除非你需要修改对象,否则请始终使用 const。如果可能的话,请尽量避免使用指针。 - Some programmer dude
8
有一些小问题:不是指针本身是常量,而是指针所指向的对象/数据是常量。这种区别非常重要,因为实际上可以有一个常量指针(即DATATYPE* const)。 - Some programmer dude
2
你很少需要直接使用指针。这对代码生成没有任何直接影响(可能会有一个const_cast来移除const,对象可以通过不同的指针进行修改等)。它可能会有影响的地方是如果调用name->method()由于const而最终调用了不同的函数。 - Marc Glisse
@Raildex • 编译器可以假设指针是常量... 这是不正确的。编译器可以假设非常量指针所指向的内容是常量。 - Eljay
显示剩余2条评论
1个回答

1
在这种情况下,实际上不应该有任何性能提升,因为你的示例中关键字const只告诉编译器指针访问将被限制为只读访问(例如,在使用互斥保护或原子指针的情况下可能会增加性能)。但是指针本身将是一个变量!
然而,如果您想使用指向只读值的常量指针,则必须像这样声明它:
const DATATYPE * const name 即使在这种修改后的情况下,大多数编译器也不应该看到任何性能改进,因为良好的编译器会自动检测给定代码中是否实际上将某些内容视为常量和/或只读实体,然后进行相应的优化(在内部)而无需程序员在各处繁琐地使用“const修饰符”。(并不是说所有const用法都是冗余的——远非如此,例如,明确使用const来定义只读实体可以生成良好且安全的API。)

在C++中,const不仅仅是为了可读性更重要。例如,只有一个const引用才能绑定到临时对象。 - MSalters
@MSalters,当然,但我从未说过const仅仅是为了可读性。实际上,请阅读我的帖子的最后一句话,我明确说“并不是所有const用法都是多余的 - 远非如此”。const有许多有用的角色。但是,正如官方C ++指南中所指出的那样,许多用途只是卖弄和多余的(是的,他们自己使用“卖弄”这个词)。此外,请注意,那个人在问关于性能提升的问题,所以我们有点跑题了。 - deLock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接