gpt4 book ai didi

c++ - 有一个转换构造函数有什么意义

转载 作者:太空狗 更新时间:2023-10-29 23:28:09 25 4
gpt4 key购买 nike

在阅读了转换构造函数之后,我得出的结论是它只是一个只有一个参数的类构造函数。这page解释了很多,但我仍然对它的使用感到困惑。为什么使用它?到目前为止,我所理解的是,不是这样声明一个实例

someclass a(12);

我们可以这样做

someclass a = 12;

最佳答案

它也很有用(危险),因为它可以自动转换参数。

 void print(std::string const& str)
{
std::cout << str << "\n";
}


int main()
{
print("Hi"); // That's not a string.
// But the compiler spots that std::string has a single
// argument constructor that it can use to convert a
// `char const*` into a std::string with.
}

它基本上是为了使语言更易于编写(阅读)。

有一个不幸的副作用(他们在事后发现)。编译器将转换您可能不希望自动转换的内容。想不出一个副手。但它们存在。因此,他们为构造函数添加了 explicit 关键字。这会阻止自动编译器转换(因为您需要显式调用它)。

感谢@Mooing Duck

int main()
{
std::vector<int> names = 3; // What does this mean?
// This does not compile because of the explicit keyword now.
// But it used to compile and the meaning is not obvious.

// It gets even worse if you think about a function that takes a vector
plop(3); // Do you want that to auto converted into an std::vector<int>?
// Would you not want a compiler error?
}

关于c++ - 有一个转换构造函数有什么意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16615464/

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