Parsec基准测试编译报错:WorkerGroup析构函数抛出说明符宽松问题
解决Parsec基准测试编译错误:WorkerGroup析构函数异常规范不匹配
错误原因
这个编译错误是C++虚函数异常规范不兼容导致的:threads::WorkerGroup的析构函数是虚函数,它的基类析构函数明确声明只能抛出threads::CondException和threads::MutexException,但当前代码中~WorkerGroup()的声明没有匹配这个异常范围(默认允许抛出任何异常),违反了C++中派生类虚函数的异常规范不能比基类更宽松的规则。
解决方案
匹配基类异常规范:修改
WorkerGroup.h第88行的析构函数声明,加上和基类完全一致的异常限定:~WorkerGroup() throw (threads::CondException, threads::MutexException);同时保证析构函数的实现代码不会抛出这两个异常之外的其他异常。
改用现代C的
noexcept(推荐C11及以上环境):如果基类析构函数实际不会抛出异常,同步修改基类和WorkerGroup的析构函数声明为:// 基类中的析构函数声明 virtual ~BaseWorkerGroup() noexcept; // WorkerGroup.h中的析构函数声明 ~WorkerGroup() noexcept override;这种写法替代了旧的
throw()规范,更符合现代C++标准,也能避免异常规范不匹配的问题。调整编译选项或编译器版本:如果是Parsec源码本身的问题,可尝试添加
-fno-exceptions编译选项禁用异常处理(需确认Parsec支持该模式),或者切换到对旧异常规范兼容性更好的编译器版本(比如GCC 4.x系列)。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

