【发布时间】:2018-07-26 18:58:36
【问题描述】:
根据cppreference std::get for variant 如果variant 中包含的类型不是预期的类型,则抛出std::bad_variant_access。这意味着标准库必须检查每个访问 (libc++)。
做出这个决定的理由是什么?为什么它不是未定义的行为,就像 C++ 中的其他地方一样?我可以解决它吗?
【问题讨论】:
-
@Justin 我不认为这是一个真正的重复。没有“为什么”的答案。其次,对于“我可以解决它”实际上没有答案。我正在提名重新开放的问题。
-
因为这就是
std::variantfor:'类型安全的联合'。如果您不希望它是类型安全的,或者想要 UB,请不要使用它:使用union。 -
In this thread,有些人给出了为什么
std::variant可能没有std::unchecked_get的一些动机。我不知道这是否真的是标准会议上讨论的内容,但推理背后有逻辑 -
@MarquisofLorne 那一半的STL也要去掉,因为到处都有UB,你可以自己实现。