相关疑难解决方法(0)

C++ 17中有哪些新功能?

C++ 17现在功能齐全,因此不太可能经历大的变化.为C++ 17提出了数百个提案.

在C++ 17中,哪些特性被添加到C++中?

当使用支持"C++ 1z"的C++编译器时,当编译器更新到C++ 17时,哪些功能可用?

c++ standards c++-faq c++17

986
推荐指数
1
解决办法
21万
查看次数

如何替换动态异常规范:throw(...)

我正在使用遗留库的项目上工作,该遗留库使用函数定义如

void func() throw(some_exception);
Run Code Online (Sandbox Code Playgroud)

由于动态异常规范在C ++ 17中已删除,所以我想知道如何解决此问题。

  1. P0003R0建议更换

    void func() throw(some_exception)
    {
        /* body */ 
    }
    
    Run Code Online (Sandbox Code Playgroud)

    用类似的东西

    void func()
    {
        try
        {
            /* body */
        }
        catch(const some_exception&) {
           throw;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    但是,我无权访问源代码(仅头文件)。

  2. 因此,我只能尝试“修复”标头中的函数定义。所以例如我可以写

    void func() noexcept(false);
    
    Run Code Online (Sandbox Code Playgroud)

    但是,当函数引发异常时,我的应用程序仍会终止。

如何更改头文件中的函数定义或可能调整我自己的项目(我使用的地方func)以获得与throw(some_exception)C ++ 17之前相同的行为?

c++ exception throw c++17

5
推荐指数
1
解决办法
665
查看次数

函数声明后的 throw() 有什么用?

C++ expressionThrow在https://en.cppreference.com/w/cpp/language/throw中定义为 a 。从语法上讲,它后面跟着一个异常类名。例如:

int a = 1, b = 0; 
if (b==0){
    string m ="Divided by zero";
    throw MyException(m);       //MyException is a class that inherit std::exception class
}
Run Code Online (Sandbox Code Playgroud)

但是,我见过其他一些我不太理解的 throw 语法:

void MyFunction(int i) throw();     // how can we have an expression following a function definition? 
Run Code Online (Sandbox Code Playgroud)

或者在自定义异常类中,我们还有:

class MyException : public std::exception
{
public:
  MyException( const std::string m)
    : m_( m )
  {}

  virtual ~MyException() throw(){};               // what is throw() in this case? 
  const char* what() …
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
670
查看次数

标签 统计

c++ ×3

c++17 ×2

c++-faq ×1

exception ×1

standards ×1

throw ×1