gpt4 book ai didi

C++在初始化类实例时隐式调用类成员的构造函数

转载 作者:行者123 更新时间:2023-11-28 01:28:10 25 4
gpt4 key购买 nike

我仍在学习 C++ 的美妙之处。我今天遇到了一些代码,希望有人能给我一些指导。我有 2 个类(class)

class B
{
public:
B( std::string s )
: m_string( s )
{
}

private:
std::string m_string;
};

class A
{
public:
A( B b )
: m_b( b )
{
}

private:
B m_b;
};

main.cpp

A a = A(std::string("hello"));

我对这样的初始化如何工作感到有点困惑?编译器如何知道 std::string("hello) 将改为传递给 B 的构造函数?

我试图找到相关文档,但没有找到..

最佳答案

当一个类有一个带有单个参数的构造函数时,该构造函数可用于将该参数隐式转换为该类的实例。这意味着无论何时需要 B,您的 B( std::string s ) 构造函数都允许传递字符串。

如果你想禁止这种隐式转换,你可以写成explicit B( std::string s )。有些人认为这是大多数单参数构造函数的良好做法。

关于C++在初始化类实例时隐式调用类成员的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52902610/

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