gpt4 book ai didi

c++ - C++中的三元运算符生成什么对象?

转载 作者:行者123 更新时间:2023-12-02 02:07:00 25 4
gpt4 key购买 nike

下面的程序

#include <optional>
#include <iostream>

int main()
{
std::optional<int> a;
constexpr bool x = true;

const std::optional<int> & b = x ? a : std::nullopt;
std::cout << (&a == &b);

const std::optional<int> & c = x ? a : (const std::optional<int> &)std::nullopt;
std::cout << (&a == &c);

const std::optional<int> & d = x ? a : (const std::optional<int>)std::nullopt;
std::cout << (&a == &d);
}

即使在编译器优化的情况下,

也会打印010: https://gcc.godbolt.org/z/asTrzdE3c

您能否解释一下为什么会这样,以及看似相同的 3 个案例之间有什么区别?

最佳答案

通俗地说,三元运算符将返回一个对象,该对象的类型的两个操作数都可以隐式转换(花絮:这就是为什么它在元函数 std::common_type 的幕后使用的原因) )。

如果两个操作数都是通用类型,您将获得对所选操作数的引用。如果没有,将创建所需类型的临时对象。您的第一个和第三个示例就是这种情况。

关于c++ - C++中的三元运算符生成什么对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68304356/

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