gpt4 book ai didi

c++ - 类型转换指针和三元? : operator. 我是重新发明了轮子吗?

转载 作者:可可西里 更新时间:2023-11-01 15:45:55 27 4
gpt4 key购买 nike

此代码的最后一行无法使用 castingAndTernary.cpp:15 进行编译:错误:不同指针类型“D1*”和“D2*”之间的条件表达式缺少强制转换

一个真正聪明的编译器可能没有任何困难,因为两者都可以安全地转换为 B*(基类)。我不愿意使用 static_cast 和 dynamic_cast 等等——我担心有一天我会混淆这些类并得到未定义的行为。这就是我创建 up_cast 模板的原因。该模板在允许的转换方面做了最低限度的工作。有更简单的方法吗?还有其他解决方法,但我不禁想到我可以使用更简单、更安全的方法吗?

struct B{ };
struct D1 : public B{ };
struct D2 : public B{ };

template<typename T,typename V>
T up_cast(V x) {
return x;
}
int main() {
bool boolean_expression = true;
B * b;
b = new D1;
b = new D2;
b = boolean_expression ? up_cast<B*>(new D1) : up_cast<B*>(new D2);
b = boolean_expression ? new D1 : new D2;
}

g++ (Ubuntu 4.3.3-5ubuntu4) 4.3.3

更新 根据@Konrad 的回答将名称从 implicit_cast 更改为 up_cast

最佳答案

A really smart compiler could have no difficulty because both can be safely casted to B*

无关紧要。标准强制这种行为。一个真正聪明的编译器的行为与观察到的一样。

使用您的自定义转换实际上很好(并且您不愿意使用显式转换是有道理的)。但是,我会使用不同的名称:upcast - 因为这是在这里发生的:在继承层次结构中向上转换。

关于c++ - 类型转换指针和三元? : operator. 我是重新发明了轮子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6179314/

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