class test
{
private:
    class privateStruct
    {
    public:
        int m;
        privateStruct(int p){m=p;}
    };
};

void ff()
{
    test::privateStruct ps(4);
    throw ps; //Does not work..
}

void main()
{
    try
    {
        ff();
    }
    catch(...)
    {
    }
}


但是以下代码有效

class test
{
private:
    class privateStruct
    {
    public:
        int m;
        privateStruct(int p){m=p;}
    };
};

void ff()
{
    throw test::privateStruct(4); //Work why
}

void main()
{
    try
    {
        ff();
    }
    catch(...)
    {
    }
}


注意:我正在使用VC ++ 6。

我需要回答为什么上面的代码有效。

提前致谢 :)

最佳答案

这是Visual Studio 6.0的一个旧/已知错误。构造临时对象时,它将忽略访问说明符。没有修复程序。

将警告级别提高到3或更高(/ W3)会导致违规代码发出警告。

10-08 06:22