【问题标题】:Any reason to use (MFC) CList<T, T&> rather than CList<T, const T&>?有什么理由使用 (MFC) CList<T, T&> 而不是 CList<T, const T&>?
【发布时间】:2014-06-06 06:55:23
【问题描述】:

我学到了一些指导方针,这些指导方针都告诉我通过引用传递变量应该始终使用 const,例如 func(const T&amp; a)。我知道CList 中的第二个模板参数是ARG_TYPE。就像CList::AddTail(ARG_TYPE item) 将使用ARG_TYPE 作为其参数类型。

我看到msdn 中的示例代码显示它使用non-const 类型作为其第二个模板参数。有什么理由更喜欢这个non-const 类型作为参数类型?

CList&lt;string, &amp;string&gt; a;CList&lt;string, const &amp;string&gt; b;

任何建议都会有所帮助。谢谢。

【问题讨论】:

  • 您发布的链接显示它确实使用const Type &amp; 作为第二个模板参数。
  • 一般来说,不要从 MSDN 获取关于 const-correctness 的建议。 MFC 程序员厌恶 const,这可能是出于完全合理的历史原因,但如今这只是彻头彻尾的糟糕做法。不幸的是,MSDN 文档倾向于延续这种不良做法,使新一代开发人员失败。在 C++ 中,只要可以使用 const,就应该这样做!
  • @EricZ 示例代码位于页面底部,它使用三个变量定义来说明如何开始使用 CList。 CList myIntList; CList myStringList; CList myTypeList;
  • 永远不要遵循使用 alwaysnever 这两个词的陈述,除了这个。正如@cody 提到的,最佳实践是在任何可以/应该使用的地方使用const。这意味着您需要了解何时应该和不应该使用它,以及识别代码中的这些情况(const 可以用于方法/函数参数、类方法签名、方法/函数返回值、自动变量等. al.).

标签: c++ mfc clist


【解决方案1】:

没有 const 的 C++ 编程就像开车没有系安全带一样。

1.它可以保护您不更改不打算更改的变量,

2.它可以防止您进行意外的变量分配

3.通过 const 引用接受参数,让您在通过引用传递的效率和按值传递的安全性中获得更高的效率

同时,编译器可以生成更高效的代码,因为它始终准确地知道变量/函数的状态。如果您正在编写紧凑的 C++ 代码,这很好。

仅供参考

http://duramecho.com/ComputerInformation/WhyHowCppConst.html

【讨论】:

  • 我在自动变量上使用了更多const。它不仅记录了这个变量的值是一个不变量,而且确保我不会重复使用或误用这个变量(参见#2)。如果/当我这样做时,我会收到一个编译器错误,这是开发周期中检测错误的最佳时间(与 RUNTIME 错误相比)。
猜你喜欢
  • 2012-08-02
  • 1970-01-01
  • 2019-03-05
  • 2014-10-28
  • 2016-12-12
  • 2010-11-10
  • 2020-02-10
  • 1970-01-01
  • 2020-09-19
相关资源
最近更新 更多