Fra*_*nez 5 c++ visual-studio stdoptional
我完全理解,由于性能原因,operator*instd::optional不会对所包含值的实际存在进行任何检查。然而,在调试模式下,性能考虑并不重要,并且在调试模式下应该做出某种断言对我来说很有意义。
Visual Studio似乎没有这样的断言(尽管我不确定其他编译器)。
我的问题是:编译器不会在调试模式下做出这样的断言是否有任何根本原因,或者它只是一个缺失的功能?
编译器不会在调试模式下做出这样的断言是否有任何根本原因,或者它只是一个缺失的功能?
ODR 违规行为。std::optional是一个类模板,因此在标头中实现。标头内针对不同预处理器符号的代码的不同行为非常危险。考虑这个例子(未经测试,你会明白的):
clang++ -DNDEBUG usesOptionalOfInt.cpp -shared -c -o myLib.so
clang++ alsoUsesOptionalOfInt.cpp main.cpp -lmyLib -o ./ub-please
Run Code Online (Sandbox Code Playgroud)
就这样,你就得到了未定义的行为。请注意,在此示例中,差异std::optional::operator*实际上不太可能造成任何损害,但您仍然希望避免这些情况。
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |