gpt4 book ai didi

c++ - 如果构造函数不接受任何输入参数,则使用显式构造函数?

转载 作者:行者123 更新时间:2023-11-27 22:39:36 25 4
gpt4 key购买 nike

我理解与 C++ 中的构造函数相关的“显式”概念,它将单个参数作为输入。但我在一些网站上读到,我们需要将构造函数更改为显式,而不管构造函数将作为输入的参数数量如何。

任何人都可以帮助我理解以下问题。

  1. 如果不接受任何输入,为什么我们需要将构造函数显式化?
  2. 如果构造函数采用多个参数并且所有参数都不是默认参数,那么将构造函数设为显式有什么用?

最佳答案

Why do we need to make a constructor as explicit if it doesn't take any input?

这对我来说似乎不正确。如果您不希望自动调用构造函数,则构造函数需要是显式的。

假设你有:

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

void bar(Foo)
{
}

然后,

bar(1);

会起作用。译为:

bar(Foo(1));

如果有默认构造函数,即不接受任何参数的构造函数,则没有任何可转换的内容。您不得使用:

bar();

并希望将其翻译成:

bar(Foo{});

What is the use of making a constructor as explicit if it takes more than one parameter and all the parameters are not default?

这个有一定的道理。

如果你有:

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

void bar(Foo)
{
}

你不可以使用

bar(10, 20);

bar((10, 20));

希望翻译成:

bar(Foo(10, 20));

但是,您可以使用:

bar({10, 20});

它会被翻译成:

bar(Foo{10, 20});

如果您想阻止使用此语法,bar({10, 20}),您可以使构造函数显式。 IMO,这没有那么实用。无意中滥用带有一个参数的构造函数的可能性是真实存在的。无意中误用具有多个参数的构造函数的可能性很小。

关于c++ - 如果构造函数不接受任何输入参数,则使用显式构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50107536/

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