构造函数中变量初始化的正确顺序

时间:2016-08-19 14:26:57

标签: c++

所以这是我的问题,我试图学习一些代码,我只是在玩改变和探索一些新的方法来编写它,但我意识到如果{}的声明不是最后一个变量它不起作用, (如果我改变了m_belowScene和m_overscene的位置,那就可以了。)

我的修改:

public function myFunc(int $id) : string
    {
        $statement = self::$db->prepare("Some query WHERE id = ?");
        $statement->bind_param("i", $id);
        $statement->execute();
        $result = $statement->get_result();
        return $result;
    }

正确的方法是这个

 SceneManager::SceneManager()
    : m_scene(std::make_shared<PolyGraphicNode>()),
      m_cplSign(std::make_shared<CPLSymbol>(0.05, 0.2, 0.5)),
      m_belowScene(std::make_shared<PolyGraphicNode>()){ 
      std::shared_ptr<CPLSymbol> symbol = std::make_shared<CPLSymbol>(0.01, 0.04, 0.1, CPL_NODE);
      m_belowScene->append(symbol);
      }
      m_overScene(std::make_shared<PolyGraphicNode>());

1 个答案:

答案 0 :(得分:4)

您必须区分构造函数的初始化列表 body 。至于tobi303指出,这些不能混合。

编写构造函数的语法是

Class::Class(<parameters>) : <initializer list> { <body> }

<body>以&#39; {&#39;。

开头

在初始值设定项列表中,变量的格式为variable(value)

考虑班级

class foo {
    int x;
    int y;
    int z;

    foo(int value_x, int value_y);
};

构造函数可能定义如下:

foo::foo(int value_x, int value_y) :
    x(value_x),
    y(value_y), 
    z(1)
{
}

如果你想添加另一个变量v,并用一些值初始化它,你必须把它放在初始化列表中这样(注意括号):

foo::foo(int value_x, int value_y) :
    x(value_x),
    y(value_y), 
    z(1),
    v(42)
{
}

在体内,可以使用更复杂的操作。因此,您的示例显示了variable = value形式的赋值语句。 但是,赋值语句只能在正文中使用,而不能在初始化列表中使用。同样,表单variable(value)的初始化在正文中不允许

因此,您必须注意在哪个地方使用哪种形式。

另见关于这些形式的变量初始化之间差异的以下问题: