首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有可能创建一个模仿基本类型的构造函数语义的C++类型?

有没有可能创建一个模仿基本类型的构造函数语义的C++类型?
EN

Stack Overflow用户
提问于 2012-04-12 04:57:35
回答 8查看 186关注 0票数 1

int/double/等的构造函数语义是:

代码语言:javascript
运行
复制
int a; // uninitialized
int b = int(); // zero initialized
int c = int(4); // four

是否有可能定义一个具有完全相同行为的类?即同时具有未初始化和已初始化的默认构造函数的构造函数?我认为这是不可能的,目前通过创建一个构造函数来解决这个问题,这个构造函数只在调用0时编译,但希望确保没有一种方法可以精确地模仿基本类型。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-04-12 05:05:39

如果未定义任何构造函数:

代码语言:javascript
运行
复制
struct A { int x; };

A a; // default-initialized (unintialized)
A b = A(); // value-initialized
A c = { 4 }; // four
票数 2
EN

Stack Overflow用户

发布于 2012-04-12 05:01:34

这是不可能的,因为与内置类型相反,您的类构造函数将始终被调用( be called )。

如果你真的想做“未初始化”的对象(为什么?由于未初始化的变量,你的bug还不够多吗?),你可能不得不使用放置new的技巧。

票数 2
EN

Stack Overflow用户

发布于 2012-04-12 05:14:14

“未初始化的结构”是矛盾的。

构造中缺少初始化只是由于错误(无法递归构造整个对象)。

如果C++类有构造函数,就会调用它。如果由于任何原因不能调用它,那么这种情况就是错误的(例如,传递了错误的构造参数,这些参数与任何构造函数都不匹配)。

C++类可以包含基本类型的成员,其构造函数可以忽略对这些成员的初始化。

这可以用于优化:如果您有一个复杂的初始化,您可以避免写入这些成员的开销。

这就是这样做的方式,而不是试图创建一个可以保持未初始化的整个类。

如果你真的想要它,一种模拟它的方法是创建一个没有任何构造函数的POD (普通老式数据结构),然后使用一些额外的技术,以便可以以保证其初始化的方式使用它。例如,从它创建一个添加构造的派生类,或者使用奇怪的重复模板模式,等等。

然后,如果您不想初始化POD,您仍然可以直接使用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10113872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档