金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  423 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks

C++类定义中应该允许设置默认值

目前C++的类成员初始化方式是成员初始化列表,在构造函数原型之后,以冒号分隔:

A::A() : _n(0), _m(0)
{
    ...
}

成员初始化列表这种方式很容易忘记或遗漏某个成员的初始化。
因为添加一个成员变量需要额外地在成员初始化列表中添加代码,这种错误很难避免。
而且未初始化的后果会很严重。
不知有什么好办法让编译器对类成员未初始化报警?
有没有这种编译选项报告类成员未初始化?

如果在类定义中允许设置初始化值不是更简单直观?

class A
{
    ...
    int _n = 0;
    int _m = 0;
};

我应该不是第1个人对C++作这种提议,实现也很简单,不知C++为什么没采纳?

(转载请注明来源于金庆的专栏)


posted on 2009-12-12 11:20 金庆 阅读(1853) 评论(3)  编辑 收藏 引用 所属分类: 1. C/C++

评论

# re: C++类定义中应该允许设置默认值 2009-12-12 16:03 唐风
C++0x 中貌似可以。
确实是一种很合理也很有用的初始化方式。  回复  更多评论
  

# re: C++类定义中应该允许设置默认值 2009-12-13 15:09 游走
一种方案不能从一方面觉得好就要加入语言,需要综合考虑可能引入的其它问题,C++0x的提案有很多 有漂亮的理由, 但仔细思考, 却也有很多问题, 这个类似

按unix系的设计逻辑, 能原子分开的就尽量分开, 毕竟定义和初始化是两个动作, 并且很多时候初始化并没有什么用处, 因为马上就要被改掉, 如果确实有, 那一般就是配置性的参数, 放到静态变量即可。同时还应注意与的兼容性。   回复  更多评论
  

# re: C++类定义中应该允许设置默认值 2009-12-13 15:15 看客
同样的讨论还有为何

free(p) 实现上不在里面就把p置NULL呢

工程上的需要不是语言改进的关键理由,要不争论就太多了
c系的特点就是充分相信程序员--他的书写者, 然后忠实执行他的意思, 而自身, 能简则简.  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理