2013-10-02 233 views
0

我使用MonkSVG lib。下面是代码的示例:C++。奇怪的构造函数声明?

link

这里是一个代码部分:

OpenVG_SVGHandler::OpenVG_SVGHandler() 
    : ISVGHandler() 
    , _mode(kGroupParseMode) 
    , _current_group(&_root_group) 
    , _blackBackFill(0) 
    , _batch(0) 
    , _use_opacity(1) 
    , _has_transparent_colors(false) 

据我所知的第一个 - ISVGHandler() - 是指没有PARAMS父构造的调用。

所以:

  • 什么其他PARAMS是什么意思?

  • _current_group(&_root_group)意味着我需要传递一个额外的参数给它,不是吗?

  • 例如,_batch(0)batch = 0;之间是否有区别?

  • 有命令有什么影响吗?

+0

这应该在任何介绍C++的书或教程 –

+0

被视为做“初始化搜索清单”。 –

+1

http://en.cppreference.com/w/cpp/language/initializer_list – DGomez

回答

0
OpenVG_SVGHandler::OpenVG_SVGHandler() 
    : ISVGHandler() 
{ 
    _mod = kGroupParseMode; 
    _current_group = &_root_group; 
    _blackBackFill = 0; 
    _batch = 0; 
    _use_opacity = 1; 
    _has_transparent_colors = false; 
} 

=>快捷方式=>

OpenVG_SVGHandler::OpenVG_SVGHandler() 
    : ISVGHandler() 
    , _mode(kGroupParseMode) 
    , _current_group(&_root_group) 
    , _blackBackFill(0) 
    , _batch(0) 
    , _use_opacity(1) 
    , _has_transparent_colors(false) 
{ 
} 

为了有一些influance

Class::Class() 
    : b(a), // b == 10, 0, or random value ?? Compiller usually raises warrning 
     a(10) 
{ 
} 
+0

成员将按照它们出现在课程主体中的顺序进行初始化。它们出现在初始化列表中的顺序与编译器无关,不过良好的实践表明顺序应该与类体的顺序相同。在你的例子中,如果'Class'的定义中的'b'前出现'a',则初始化将正常工作,'b'将用'a'正确初始化。 –

+0

-1:初始化列表不是构造函数体内赋值的*快捷键*。这意味着他们是同一件事 - 但事实并非如此。 –

+0

这个答案是不完整的,但没有人可以发布新的答案,所以我接受它。 – user2083364