gpt4 book ai didi

c++ - C++ 中更宽松的抛出说明符

转载 作者:可可西里 更新时间:2023-11-01 18:15:28 24 4
gpt4 key购买 nike

我收到一条错误消息:

错误:“虚拟 CPLAT::CP_Window::~CP_Window()”的错误抛出说明符

关于析构函数,我以前从未听说过这个,一些谷歌搜索说这可能是 GCC 4 问题,我不确定如何解决这个问题,因为我需要 GCC 4 来构建通用二进制文件。

我的环境:OS X 10.6、XCode 3.2.2、GCC 4,用于构建通用二进制文件。

问题是什么?

最佳答案

我假设 CPLAT 有一个基类?我还猜测您没有在 CPLAT 的析构函数上放置 throw 说明符?

您可以将 throw(X)(其中 X 是以逗号分隔的异常列表)放在函数签名的末尾,以指示允许抛出哪些异常。如果将 throw() 作为 throw 说明符,则表明该函数不会抛出任何异常。使用析构函数执行此操作相当常见,因为您永远不希望析构函数抛出异常。

覆盖具有 throw 说明符的函数的类不能具有比被覆盖的函数更宽松的 throw 说明符(列出更多异常),因为这表明派生类的函数可能违反基类的 throw 说明符' 功能。没有 throw 说明符意味着可以从该函数中抛出任何异常,因此它尽可能地宽松。

很有可能,您需要将 throw() 添加到 CPLAT 的析构函数的函数签名的末尾。

编辑: 顺便说一句,我可能应该补充一点,您可能不想在不真正了解的情况下使用抛出说明符(除了析构函数上的 throw() 之外)这就是你想要的。与 Java 的已检查异常不同,它们不会在编译时被捕获,而是在运行时如果违反则终止您的程序。因此,除非您知道自己在做什么,否则最好不要使用它们。

关于c++ - C++ 中更宽松的抛出说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2687208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com