gpt4 book ai didi

c++ - 为什么 std::optional operator* 没有 has_value() 的 Debug模式断言?

转载 作者:搜寻专家 更新时间:2023-10-31 00:51:14 24 4
gpt4 key购买 nike

我完全理解,由于性能原因,std::optional 中的operator* 不会对包含值的实际存在进行任何检查。然而,在 Debug模式下性能考虑应该无关紧要,并且在 Debug模式下应该做出某种断言对我来说很有意义。

Visual Studio 似乎没有这样的断言(虽然我不确定其他编译器)。

我的问题是:编译器不会在 Debug模式下做出这样的断言是否有任何根本原因,或者它只是一个缺失的功能?

最佳答案

Is there any fundamental reason why the compiler would NOT make such an assertion on debug mode or is it just a missing feature?

ODR 违规。 std::optional 是一个类模板,因此在 header 中实现。对于不同的预处理器符号, header 中代码的不同行为是非常危险的。考虑这个例子(未经测试,你会明白这一点):

clang++ -DNDEBUG usesOptionalOfInt.cpp -shared -c -o myLib.so
clang++ alsoUsesOptionalOfInt.cpp main.cpp -lmyLib -o ./ub-please

这就是未定义行为。请注意,在这个示例中,std::optional::operator* 中的差异实际上不太可能造成任何伤害,但您仍然希望避免这些情况。

关于c++ - 为什么 std::optional operator* 没有 has_value() 的 Debug模式断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55727399/

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