【发布时间】:2018-11-01 05:41:51
【问题描述】:
MISRA 规则 14-5-2 说:
当模板构造函数具有单个参数是泛型参数时,应声明复制构造函数。
我找不到任何足够简单的术语向我解释为什么在这种情况下必须有一个复制构造函数。
我看过 Copy constructor of template class 和 C++ Template constructor, why is copy constructor being called?,但都没有真正帮助我。我看到提到复制构造函数不存在,但默认的构造函数还没有被创建吗?我看到了对复制省略的引用,但我不明白为什么需要复制构造函数。
据我所知,这可能属于“需要注意的良好编程习惯”......或者它可能是“您刚刚进入了未定义的行为领域”。 我应该寻找什么来确定违反此 MISRA 规则的代码是否会在其当前代码库中造成风险?
【问题讨论】:
-
难道他们没有在这些规则后面添加任何推理(带有示例)吗?我可以想象这个特定规则旨在防止有人认为通过传递
type const &他将调用这个模板构造函数。 C++ 在复制构造函数方面似乎有丑陋的一面。例如,类可以删除复制构造函数,但仍然是正确的is_copy_constructible -
我找不到任何理由。我可能只是没有足够的资源。我使用的是引用规则并显示失败的静态分析工具,但没有解释隐含的风险或规则的推理。
标签: c++ templates copy-constructor misra