gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:41:15 31 4
gpt4 key购买 nike

这一行不会编译:

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

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

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

错误:
no match for ternary operator

真正奇怪的是,具有完全相同含义的较长代码确实按预期编译和运行:
    Shape shape;
if (i % 2)
shape = Rectangle(5, 5);
else
shape = Circle(5);

最佳答案

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

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

另请注意,您的分配将对对象进行切片,即 probably isn't a good idea .

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

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