c++ 默认构造函数 constexpr 还是正确未定义?

Posted

技术标签:

【中文标题】c++ 默认构造函数 constexpr 还是正确未定义?【英文标题】:c++ default constructor constexpr or properly undefined? 【发布时间】:2017-10-23 16:11:28 【问题描述】:

声明一个默认构造函数是否更好:

为成员数据分配默认值并声明为 constexpr,或 未定义所有成员数据?

我主要考虑 STL 容器的上下文,例如vector 大量使用默认构造函数,那么哪种方式更高效呢?

【问题讨论】:

空构造函数??你的意思是默认构造函数吗? 是的,如果你愿意,你可以这样称呼它。 `Default' 现在被重载了,我更喜欢将不带任何参数的那个称为 null 构造函数。 我喜欢你的措辞,好像慷慨地允许我们使用其他程序员实际理解的正确术语。 "Impenetrability! That's what I say!" 【参考方案1】:

就像 C++ 中的所有东西一样,这取决于。

您是否打算为此创建大缓冲区并且两者都需要优化不清除内存并且不愿意自己分配未分配的内存?

或者您希望您的程序更频繁地正确吗?

这样说,默认你的成员数据和 constexpr 你的构造函数。有一些方法涉及一些循环,您可以在其中声明一个足够大的未初始化内存缓冲区以保存您的类的 N 个副本并稍后初始化数据。 (确实没有符合标准的可移植方式来实现std::vector,但这是标准中的一个缺陷,不会很快影响到您的现实生活。)

【讨论】:

我认为我属于前一种思维模式,但希望对一般情况有一个答案。嗯,我想我不能指望得到比这更清楚的答案了,谢谢。

以上是关于c++ 默认构造函数 constexpr 还是正确未定义?的主要内容,如果未能解决你的问题,请参考以下文章

C++ constexpr类型说明符

现代C++笔记

什么时候应该在 C++ 中使用文字类?

C++ 构造函数的默认参数[关闭]

constexpr 具有未触及的非 constexpr 参数:谁是正确的,clang 还是 gcc?

C ++ constexpr最终虚函数[重复]