C++ 抛出异常并忽略“到达非void函数末尾”警告是否不好?
我的代码:C++ 抛出异常并忽略“到达非void函数末尾”警告是否不好?,c++,C++,我的代码: QSerialPortInfo getCentralInfo() { const QList<QSerialPortInfo> infoList = QSerialPortInfo::availablePorts(); for (auto it = infoList.cbegin(); it != infoList.cend(); ++it) { if (it->manufacturer()
QSerialPortInfo getCentralInfo()
{
const QList<QSerialPortInfo> infoList =
QSerialPortInfo::availablePorts();
for (auto it = infoList.cbegin();
it != infoList.cend(); ++it) {
if (it->manufacturer() == "1a86") {
happyTalk("Znaleziono centralkę.");
return *it;
}
}
escape("Nie znaleziono centralki.");
}
void escape(QString errorMsg) {
qDebug() << "[!] " << errorMsg;
throw;
}
void happyTalk(QString msg) {
qDebug() << "[\u2713] " << msg;
}
这样停止应用程序是否优雅?为什么不优雅?我收到调试器警告,但我认为调试器错了- 这里的问题是
throw;
并不意味着抛出一些异常。这意味着重新显示当前正在处理的异常。如果在没有活动异常的情况下执行throw,我相信它会调用std::terminate来结束程序
处理这个问题的一种更优雅的方法是抛出一个异常(可能是一个std::logic_错误),以指示发生了错误并将控制权转移到错误处理程序,或者通过调用exit或abort退出程序
希望这有帮助 这里的问题是
throw;
并不意味着抛出一些异常。这意味着重新显示当前正在处理的异常。如果在没有活动异常的情况下执行throw,我相信它会调用std::terminate来结束程序
处理这个问题的一种更优雅的方法是抛出一个异常(可能是一个std::logic_错误),以指示发生了错误并将控制权转移到错误处理程序,或者通过调用exit或abort退出程序
希望这有帮助 添加[[noreturn]]属性以转义,并实际抛出一个对象
[[noreturn]]告诉编译器、优化器和警告生成器escape永远不会返回,因此在理想情况下它应该阻止该错误。添加[[noreturn]]属性以进行escape,并实际抛出一个对象
[[noreturn]]告诉编译器、优化器,并希望警告生成器,escape永远不会返回,因此在理想情况下它应该阻止该错误。这并没有达到它停止警告的效果,它只在调用escape时发出警告,在一切正常时发出警告-我很困惑,但无论如何,我已经与exit0交换了抛出:-这并没有起到什么作用,它停下来只是在呼叫逃跑时发出警告,在一切正常时发出警告——我感到困惑,但无论如何,我已经与exit0交换了掷骰-[[noreturn]]是C++11-升级您的编译器@smsware我正在使用C++11,你确定qmake开发人员实现了这一点吗?@smsware我不知道你的编译器的实际C++11支持是什么。[[noreturn]]是C++11-升级你的编译器@smsware我正在使用C++11,你确定qmake开发人员实现了这一点吗?@smsware我不知道你的编译器对C++11的实际支持是什么。