访问私有std :: string继承上的字符串

Car*_*nta 4 c++

我在书中看到了这个例子:

class Test: private std::string
{
public:
    Test():std::string("How?")
    {
    }
};

int main(int argc, char** argv)
{
    Test t;

    std::cout<<(std::string&)t<<std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不知道当我对类名称进行类型化时它是如何打印"如何"的?是因为运营商?但我知道,当你进行私有继承时,公共和受保护的变量和方法将被视为"私有".

所以我的问题是,它是如何打印"如何"?

编辑:

那么谁持有字符串值"如何"以及它是如何打印的?因为它是通过类型转换打印的.

Que*_*tin 6

这说明了C风格转换的危险之一:它是唯一忽略继承访问说明符的转换.如你所见,演员成功地挖出了std::string基准参考,即使它是私有的.如果你用a尝试这个static_cast,它将无法编译.

编辑:

std::string的子对象t持有"How",因为你初始化它Test的构造.转换为对基类的引用用于访问相应的子对象.