gpt4 book ai didi

c++ - 在 C++ 中初始化变量的正确方法是什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:42 27 4
gpt4 key购买 nike

我有以下代码:

bool c (a == b);

bool c {a == b};

其中 a 和 b 是一些相同类型的变量。

我想知道,以上两个初始化有什么区别,在什么情况下应该首选哪个?我们将不胜感激。

最佳答案

两种形式都是direct initialization .

使用花括号 {} 进行初始化检查缩小转换,如果发生此类转换,则会生成错误。不同于 ()。 (gcc issues a warning by default 并且需要 -Werror=narrowing 编译器选项以在发生缩小时生成错误。)

花括号 {} 的另一个用途是统一初始化:使用相同的语法初始化有和没有构造函数的两种类型,例如:

template<class T, class... Args>
T create(Args&&... args) {
T value{std::forward<Args>(args)...}; // <--- uniform initialization + perfect forwarding
return value;
}

struct X { int a, b; };
struct Y { Y(int, int, int); };

int main() {
auto x = create<X>(1, 2); // POD
auto y = create<Y>(1, 2, 3); // A class with a constructor.
auto z = create<int>(1); // built-in type
}

使用花括号 {} 进行初始化的唯一缺点是它与 auto 关键字的交互。 auto{} 推导为 std::initializer_list,这是一个已知问题,请参阅 "Auto and braced-init-lists" .

关于c++ - 在 C++ 中初始化变量的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32115137/

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