C++ 复制构造函数中出现异常的可能原因是什么?

C++ 复制构造函数中出现异常的可能原因是什么?,c++,exception,constructor,C++,Exception,Constructor,我在Herb Sutter的书中看到复制构造函数可能会抛出异常 我的第一个问题是复制构造函数是否总是抛出异常 我的第二个问题是,如果复制构造函数没有在复制构造函数中使用新运算符和其他函数,是否仍然存在可能的异常 > P>除了析构函数和主< 之外,任何C++函数都可以根据程序员编写的内容在理论上抛出异常。 并非所有复制构造函数都抛出异常。例如,默认情况下,任何“纯旧数据”或“标准布局”结构/类都具有永远不会抛出的复制构造函数。但是,大多数值得一提的类都包含映射或向量或字符串,所有这些类都有可能抛出

我在Herb Sutter的书中看到复制构造函数可能会抛出异常

我的第一个问题是复制构造函数是否总是抛出异常


我的第二个问题是,如果复制构造函数没有在复制构造函数中使用新运算符和其他函数,是否仍然存在可能的异常

> P>除了析构函数和<代码>主< <代码>之外,任何C++函数都可以根据程序员编写的内容在理论上抛出异常。 并非所有复制构造函数都抛出异常。例如,默认情况下,任何“纯旧数据”或“标准布局”结构/类都具有永远不会抛出的复制构造函数。但是,大多数值得一提的类都包含
映射
向量
字符串
,所有这些类都有可能抛出
std::bad_alloc
的复制构造函数

struct person {
    char name[20];
    int id;
    int height;
};

到目前为止,
std::bad_alloc
是复制构造函数中最常见的异常,但任何异常都是可能的。要了解复制可能引发的异常,您必须查看特定类的规范

> P>除了析构函数和<代码>主< <代码>之外,任何C++函数都可以根据程序员编写的内容在理论上抛出异常。 并非所有复制构造函数都抛出异常。例如,默认情况下,任何“纯旧数据”或“标准布局”结构/类都具有永远不会抛出的复制构造函数。但是,大多数值得一提的类都包含
映射
向量
字符串
,所有这些类都有可能抛出
std::bad_alloc
的复制构造函数

struct person {
    char name[20];
    int id;
    int height;
};

到目前为止,
std::bad_alloc
是复制构造函数中最常见的异常,但任何异常都是可能的。要了解复制可能引发的异常,您必须查看特定类的规范

> P>除了析构函数和<代码>主< <代码>之外,任何C++函数都可以根据程序员编写的内容在理论上抛出异常。 并非所有复制构造函数都抛出异常。例如,默认情况下,任何“纯旧数据”或“标准布局”结构/类都具有永远不会抛出的复制构造函数。但是,大多数值得一提的类都包含
映射
向量
字符串
,所有这些类都有可能抛出
std::bad_alloc
的复制构造函数

struct person {
    char name[20];
    int id;
    int height;
};

到目前为止,
std::bad_alloc
是复制构造函数中最常见的异常,但任何异常都是可能的。要了解复制可能引发的异常,您必须查看特定类的规范

> P>除了析构函数和<代码>主< <代码>之外,任何C++函数都可以根据程序员编写的内容在理论上抛出异常。 并非所有复制构造函数都抛出异常。例如,默认情况下,任何“纯旧数据”或“标准布局”结构/类都具有永远不会抛出的复制构造函数。但是,大多数值得一提的类都包含
映射
向量
字符串
,所有这些类都有可能抛出
std::bad_alloc
的复制构造函数

struct person {
    char name[20];
    int id;
    int height;
};
到目前为止,
std::bad_alloc
是复制构造函数中最常见的异常,但任何异常都是可能的。要了解复制可能引发的异常,您必须查看特定类的规范

如果“执行异常”的意思是它可能会抛出异常,那么不是。不是每个复制构造函数都会抛出异常。如果类只包含一个int,而复制构造函数只复制该int,那么它就不可能抛出异常

任意复制构造函数是否会抛出异常,实际上只是一般问题的一个特例,任何函数都会抛出异常吗

正如您所料,它完全取决于它调用的其他函数的功能。如果它们中的任何一个使用throw或执行一些抛出异常(可能是实现定义的)的特殊行为,那么它可能抛出异常。否则不会。

如果“执行异常”的意思是它可能会抛出异常,则不会。不是每个副本构造函数都会抛出异常。如果类只包含一个int,而复制构造函数只复制该int,那么它就不可能抛出异常

任意复制构造函数是否会抛出异常,实际上只是一般问题的一个特例,任何函数都会抛出异常吗

正如您所料,它完全取决于它调用的其他函数的功能。如果它们中的任何一个使用throw或执行一些抛出异常(可能是实现定义的)的特殊行为,那么它可能抛出异常。否则不会。

如果“执行异常”的意思是它可能会抛出异常,则不会。不是每个副本构造函数都会抛出异常。如果类只包含一个int,而复制构造函数只复制该int,那么它就不可能抛出异常

任意复制构造函数是否会抛出异常,实际上只是一般问题的一个特例,任何函数都会抛出异常吗

正如您所料,它完全取决于它调用的其他函数的功能。如果它们中的任何一个使用throw或执行一些抛出异常(可能是实现定义的)的特殊行为,那么它可能抛出异常。否则不会。

如果“执行异常”的意思是它可能会抛出异常,则不会。不是每个副本构造函数都会抛出异常。如果类只包含一个int,而复制构造函数只复制该int,那么它就不可能抛出异常

任意复制构造函数是否会抛出异常,实际上只是一般问题的一个特例,任何函数都会抛出异常吗

正如你所料,这完全取决于