You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

条件运算符与派生/基类转内置类型的疑似编译器问题

C++条件表达式中转换运算符的标准合规性问题

原始编译报错示例

以下代码会触发编译错误:

struct X {};
struct Y : X {};

using CY = const Y;

true ? X() : CY(); // 编译报错

添加转换运算符后的可编译版本

给类添加转换运算符后,代码可以正常编译:

struct X { operator int() { return 0; } };
struct Y : X { operator int() const { return 0; } };

using CY = const Y;

true ? X() : CY(); // 编译通过,条件表达式生成int类型纯右值

相关C++标准条款

根据C++标准[expr.cond] p4.3.2条款规定:

否则,如果T2是T1的基类,则目标类型为cv1 T2,其中cv1表示T1的cv限定符;

按照该条款,CY()操作数应被转换为const X类型。而根据[expr.cond] p6条款,已转换为const X类型的操作数不应调用Y::operator int() const(存在对象切片问题)。但实际情况是,修改后的示例在所有主流编译器中都能编译通过。

问题:这种编译器行为是否符合C++标准?

内容的提问来源于stack exchange,提问作者Sneed Deens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:47:33