构造函数没有抛出异常

3
在我下面的代码中,我想测试如果我有一个包含另一个构造函数抛出异常的对象的对象会发生什么。但是下面的代码什么也没做。控制台上根本没有打印任何东西。
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;
    }
}

如果在try块中使用注释的代码,则可以正常显示。我还尝试了以下方法:
B b(A(), C());

依然没有任何消息。


4
欢迎来到“最令人烦恼的解析”世界。你展示的两个尝试都是“声明函数”。 - Some programmer dude
1个回答

5

这是一个带有返回类型为B,名称为b,两个未命名参数类型为AC的函数声明:

B b(A, C);

同样适用于
B b(A(), C());

当名称需要分组时(例如在使用函数指针等情况下),可以用括号将名称括起来。即使省略了名称,也可以用括号括起来。您可以通过以下方式将其转换为类型为B的变量b

B b(A{}, C{});

花括号用于初始化变量的动机之一就是在这种情况下消除歧义。在这里,它显然非常有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接