gpt4 book ai didi

c++ - 为什么在访问空的 std::optional 时没有抛出或 sigsegv?

转载 作者:太空狗 更新时间:2023-10-29 23:21:40 25 4
gpt4 key购买 nike

例子:

#include <optional>
#include <iostream>

using namespace std;

int main()
{
optional<int> t{}; // nullopt (empty) by default

cout << *t << endl;

return 0;
}

实际上这个程序打印了一些 int(int 类型的未初始化值)。此外,libcxx 使用断言检查来访问非参与值。

为什么标准不需要在这里抛出或 sigsegv?

最佳答案

Why the Standard does not require throwing or sigsegv here?

因为要求某些特定行为隐含地要求添加一个分支来检查该行为(无论是抛出还是其他)是否应该发生。

通过指定行为未定义,标准允许实现在每次间接访问时检查可选是否为空。分支执行可能比不分支慢。

委员会没有强制要求安全,而是让标准库实现者选择性能(和简单性)。您测试的实现似乎已选择不抛出异常或以其他方式通知您错误。

关于c++ - 为什么在访问空的 std::optional 时没有抛出或 sigsegv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53195768/

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