gpt4 book ai didi

c++ - 唯一指针类内初始化

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:04 24 4
gpt4 key购买 nike

假设我有一个要在类中初始化的unique_ptr 成员对象,请参见下面的代码。为什么我必须使用统一初始化(花括号)?第二个声明吐出一个错误,类似于

so.cpp:10:31: error: expected parameter declarator
std::unique_ptr<Foo> upf2(new Foo);
^
so.cpp:10:31: error: expected ')'
so.cpp:10:30: note: to match this '('
std::unique_ptr<Foo> upf2(new Foo); ^
2 errors generated.

而且我不认为这是最令人烦恼的解析问题,至少我不这么认为。

#include <memory>

class Foo
{

};

class Bar{
std::unique_ptr<Foo> upf1{new Foo}; // works fine
// std::unique_ptr<Foo> upf2(new Foo); // error here
};

int main()
{
Bar bar;
}

最佳答案

因为这是规则。类内初始化器必须使用“大括号”或“等于”;事实上,语法元素称为 brace-or-equal-initializer

int equals = 42;                      // OK
std::unique_ptr<Foo> braces{new Foo}; // Also OK

我不知道为什么不允许使用括号;也许是为了避免初始化看起来像函数声明的可能性。当直接初始化和大括号初始化之间存在差异时,这可能会很烦人:

std::vector<int> bad(6);                     // ERROR: parentheses not allowed
std::vector<int> good{6}; // OK but not the same
std::vector<int> ugly = std::vector<int>(6); // OK but ugly

关于c++ - 唯一指针类内初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26269382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com