gpt4 book ai didi

c++ - 为什么我不能在这里使用三元运算符?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:25 25 4
gpt4 key购买 nike

这一行不会编译:

Shape shape = (i % 2) ? Circle(5) : Rectangle(5, 5);

(我知道它没用,因为表达式返回的任何内容都将简化为简单的 Shape,这不是重点)。

无法弄清楚为什么它无法编译。我正在创建一个名为 shapeShape 变量(我认为此时会创建一个新的 Shape),然后我将其赋值变量表达式的结果。为什么这不能编译?

错误:

no match for ternary operator

真正奇怪的是,具有完全相同含义的较长代码确实按预期编译和运行:

    Shape shape;
if (i % 2)
shape = Rectangle(5, 5);
else
shape = Circle(5);

最佳答案

条件运算符的详细转换规则相当复杂(如果您有兴趣,可以在 this answer 中找到标准的完整引用)。简而言之,当与类类型的对象一起使用时,它将尝试转换其第二个操作数以匹配第三个操作数的类型,并将其第三个操作数转换为匹配第二个操作数的类型,但它不会尝试将两者都转换为第三类类型。

由于 Circle 不能转换为 Rectangle 并且 Rectangle 不能转换为 Circle,编译器会提示(好吧,除非这两种类型定义了一些奇怪的指针转换、作用域枚举或算术类型,在这种情况下,§5.16 [expr.cond]/p5 开始发挥作用)。

另请注意,您的赋值将切片对象,probably isn't a good idea .

关于c++ - 为什么我不能在这里使用三元运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26188281/

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