const有什么问题?

Pup*_*ppy 12 c++ c++11

constC++和C++ 0x中已知的缺点是什么?

sbi*_*sbi 55

唯一有问题的const是它被许多开发人员严重低估了.它是C++工具箱中最好的工具之一,非常锋利,但却没有危险.

  • "但让那些嘲笑我的人停止笑话的原因是,几天之后,很明显有几个非常难以重现的错误,我的一些同事拼命寻找的错误已经消失了." (来自[聊天](http://chat.stackoverflow.com/transcript/message/254713#254713)) (5认同)

Phi*_*ipp 49

主要问题是你必须写它.它应该是默认值,并且应该显式指定所有可变变量或参数.

  • 不能赞成这一点.尽管(或因为)它会对大多数程序员的先入之见造成严重破坏. (6认同)
  • 除了两件事:创建大多数变量来写入.默认情况下将它们全部读取可创建更多工作.此外,C和C++语言哲学是程序员知道他们正在做什么,语言不应该阻止你做任何你想做的事情. (4认同)
  • 你永远不会发现一种方式或另一种方式更好.您为读/写创建的一些对象(循环计数器,迭代器,容器,流,大多数字符串)和您只分配一次的其他对象 - 实际上,我想不出那个对象的任何示例.为什么你的一次性写入不是恒定的初始化? (3认同)
  • Hooray for F#变量:) (2认同)
  • @Jay"创建了大部分变量来写入." - *一次*.我很少在第一次赋值后更改变量的值(容器是一种例外). (2认同)

fre*_*low 17

有什么不对的const是,许多程序员似乎无法完全理解它,而"半常规正确"的项目根本不起作用.这是你需要知道的:

  1. Fooconst Foo(或Foo const)
  2. Foo&const Foo&(或Foo const&)
    • references-to-const绑定到所有类型的东西,而引用到非const则不绑定
  3. Foo*const Foo*(或Foo const*)
    • 指针变量也可以Foo* constconst Foo* const(或Foo const* const)
  4. void Foo::mutator()int Foo::accessor() const
    • 但const成员函数内的指针成员仍然指向非const对象
    • 所以我们可能会意外地从const函数返回非const数据
  5. iteratorconst_iterator
    • 迭代器变量也可以const iteratorconst const_iterator

从没有const概念的语言迁移到C++是相当困难的,任何许多人都没有看到这一点.

  • 许多程序员不理解它不是`const`的问题.这是程序员的一个问题,也是整个西方世界编程教育的严重可悲状态. (3认同)

Che*_*Alf 16

我在新闻组中经常抱怨的两个主要问题是

我认为后者可以/应该得到语言的支持.

可能与对协变成员函数实现的支持相结合,因为两者都需要一些方法来获取this指针的类型.

第三个问题是

干杯&hth.,

  • @Rup:许多Microsoft API不使用很多const.你最后一次看到const HANDLE是什么时候?还是const IDirect3DDevice9*?微软使用const作为字符串,这就是它. (12认同)
  • @DeadMG:`HANDLE`是一个不透明的对象,在不使用API​​函数的情况下无论如何都无法修改.对于COM接口,它们使用诸如`[in]`和`[out]`之类的属性.对于大多数其他C类型,它们使用`const`. (4认同)
  • +1表示"需要定义方法的const和非const版本".! (3认同)
  • 哪些Microsoft API不是const-aware?IIRC Windows API使用LPCTSTR,MFC正确使用const IIRC等等.我想不出任何. (2认同)