gpt4 book ai didi

c++ - 带有多个参数的构造函数是否需要 explicit 关键字?

转载 作者:可可西里 更新时间:2023-11-01 17:40:15 32 4
gpt4 key购买 nike

这个问题与之前的 C++11 (C++03) 标准有关。 explicit 防止从一种类型到另一种类型的隐式转换。例如:

struct Foo
{
explicit Foo(int);
};

Foo f = 5; // will not compile
Foo b = Foo(5); // works

如果我们有一个带有两个或更多参数的构造函数,explicit 会阻止什么?我知道在 C++11 中你已经支持了初始化,所以它会阻止这样的构造:

struct Foo
{
explicit Foo(int, int);
};

Foo f = {4, 2}; // error!

但在 C++03 中我们没有大括号初始化,那么 explicit 关键字在这里阻止了什么样的构造?

最佳答案

如果有人使用默认参数更改您的方法的签名,这可能会很有趣:

struct Foo
{
explicit Foo(int, int = 0);
};

使用 explicit 关键字,您惯用地说您永远不希望构造函数进行隐式转换。

关于c++ - 带有多个参数的构造函数是否需要 explicit 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29146127/

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