【发布时间】:2014-06-06 06:55:23
【问题描述】:
我学到了一些指导方针,这些指导方针都告诉我通过引用传递变量应该始终使用 const,例如 func(const T& a)。我知道CList 中的第二个模板参数是ARG_TYPE。就像CList::AddTail(ARG_TYPE item) 将使用ARG_TYPE 作为其参数类型。
我看到msdn 中的示例代码显示它使用non-const 类型作为其第二个模板参数。有什么理由更喜欢这个non-const 类型作为参数类型?
CList<string, &string> a; 与 CList<string, const &string> b;
任何建议都会有所帮助。谢谢。
【问题讨论】:
-
您发布的链接显示它确实使用
const Type &作为第二个模板参数。 -
一般来说,不要从 MSDN 获取关于 const-correctness 的建议。 MFC 程序员厌恶 const,这可能是出于完全合理的历史原因,但如今这只是彻头彻尾的糟糕做法。不幸的是,MSDN 文档倾向于延续这种不良做法,使新一代开发人员失败。在 C++ 中,只要可以使用 const,就应该这样做!
-
@EricZ 示例代码位于页面底部,它使用三个变量定义来说明如何开始使用 CList。 CList
myIntList; CList myStringList; CList myTypeList; -
永远不要遵循使用 always 和 never 这两个词的陈述,除了这个。正如@cody 提到的,最佳实践是在任何可以/应该使用的地方使用
const。这意味着您需要了解何时应该和不应该使用它,以及识别代码中的这些情况(const可以用于方法/函数参数、类方法签名、方法/函数返回值、自动变量等. al.).