【发布时间】:2020-02-23 22:40:18
【问题描述】:
我正在尝试使用三元运算符设置变量。但是,编译器抱怨不兼容的类型。我确信有办法做到这一点。我已经尝试对基类进行静态转换,但我无法获得正确的语法。
#include <iostream>
#include <memory>
struct A
{
virtual ~A() = default;
virtual void test() {std::cout << "A" << std::endl;}
};
struct B: public A
{
void test() final {std::cout << "B" << std::endl;}
};
struct C: public A
{
void test() final {std::cout << "C" << std::endl;}
};
int main()
{
bool t = true;
// Try to cast try a base unique class ptr. Maybe use static_cast??
std::unique_ptr<A> aptr = t ? std::make_unique<B>(): std::make_unique<C>();
aptr->test();
}
【问题讨论】:
-
:两侧的表达式类型必须相同或至少可以相互转换。在你的情况下,它们不是,所以你根本不能使用三元表达式。哪个 IMO 是一件好事,因为它往往会使代码更难阅读,因此也更难维护。 -
+1 @Someprogrammerdude 你提到可读性很有趣。我花了一个小时从这段代码中找出一个错误,因为我翻转了逻辑操作。我花了更长的时间才意识到这个问题,因为三元运算符使它更难阅读。
标签: c++ c++11 c++14 conditional-operator