Kra*_*ken 3 c++ constructor exception most-vexing-parse
在我下面的代码中,我想测试如果我有一个对象,会包含另一个构造函数抛出异常的对象会发生什么.但是下面的代码绝对没有.控制台上根本没有打印任何内容.
class A
{
public:
A()
{
cout << "in A constructor" << endl;
throw "error creating A";
}
~A()
{
cout << "destructing A" << endl;
}
};
class C
{
public:
C()
{
cout <<"in C constructor" << endl;
}
~C()
{
cout << "in C destructor " << endl;
}
};
class B
{
public:
C c;
A a;
B(A a_, C c_): a(a_), c(c_){}
B(){}
};
int main()
{
try{
B b(A, C);
//B b;
}
catch(char const* s)
{
cout <<"catching" << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
如果在try块中,我使用注释代码,那么它显示正常.
我也尝试过
B b(A(), C());
Run Code Online (Sandbox Code Playgroud)
依然没有.
这是一个带有返回类型B,名称b和两个类型的未命名参数的函数声明,A并且C:
B b(A, C);
Run Code Online (Sandbox Code Playgroud)
同样的
B b(A(), C());
Run Code Online (Sandbox Code Playgroud)
因为名称可以用括号括起来(允许分组,在使用例如函数指针等时是必需的),甚至遗漏的名称也可以用括号括起来.你可以把它变成一个变量b类型B由
B b(A{}, C{});
Run Code Online (Sandbox Code Playgroud)
花括号初始化变量的动机之一是在这种情况下消除歧义.在这里,它显然派上用场了.
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |