gpt4 book ai didi

C++ 对类使用断言?

转载 作者:行者123 更新时间:2023-11-30 03:51:37 27 4
gpt4 key购买 nike

我读了一些关于 assert 的帖子,毕竟我只能想象以下用法是合法的:

class Class
{
public:
Class( Requirement* aRequirement )
: m_Requirement( aRequirement )
{
}

// ...

void doSomething()
{
// Theoretically it is always set, but it is
// possible that a messy user passed a null pointer.
assert( m_Requirement != nullptr );

// ...
}

// ...

private:
Requirement* m_Requirement;
};

因此,当理论上变量有效时,使用断言是合法的,但有可能是乱七八糟的用户传递了一些不合适的值。

  • 例如,如果我们想检查一个范围,那么我们不应该使用assertexception,而只使用条件语句。
  • 如果有异常(exception)情况,则应使用exceptions
  • 这里的问题是......什么时候一切都应该是正确的是 assert 应该被使用的确切时间?
  • 对吗?
  • 或者还有什么其他情况需要使用 assert 吗?

最佳答案

TL;DR:异常是针对异常但可从外部恢复的错误,断言是为了在内部捕获错误。

assert() 用于捕获那些不应该发生的事情,在任何情况下,如果程序是正确的。目标是在程序进入不可能的状态时立即停止程序进行分析,以免程序失控并在其他地方崩溃、混淆堆栈或任何其他难以调试的故障。

您应该使用断言来检查函数是否提供了正确的参数(以捕获用户的错误),算法是否按照预期的方式工作(以捕获您自己的错误)等。

异常是用来捕获可能(并且总有一天)发生的事情,并且不在任何程序员的控制之下,比如网络故障、内存不足、文件 I/O 问题等。它们是一个错误处理工具,它为它们提供了替代代码路径。

您应该使用它们将错误传达给您可以处理它们的地方。例如,从客户端处理程序底部抛出的内存异常可能会飞回并被主服务器程序捕获,然后主服务器程序会优雅地通知客户端并关闭其连接并继续正常工作。

关于C++ 对类使用断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31171062/

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