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.
我需要回答上述代码的工作原理。
提前致谢:)
答案 0 :(得分:4)
这是Visual Studio 6.0的旧/已知错误。它在构造临时对象时忽略访问说明符。没有可用的修复程序。
将警告级别提高到3或更高(/ W3)将导致违规代码发出警告。
答案 1 :(得分:1)
你的第二个例子中的代码是有效的,因为Visual C ++ 6因其糟糕的标准符合性而臭名昭着。
它偶然起作用。
答案 2 :(得分:0)
即使是第二个代码段也无法编译。无法在函数ff()中访问privateStruct。