此代码:
bool contains = std::find(indexes.begin(), indexes.end(), i) != indexes.end();
CardAbility* cardAbility = contains ? new CardAbilityBurn(i) : new CardAbilityEmpty;
if (contains)
{
cardAbility = new CardAbilityBurn(i);
}
else
{
cardAbility = new CardAbilityEmpty;
}
我需要注意(我想您可能需要这些信息),CardabilityEmpty
和CardabilityBurn
都是从Cardability
派生出来的,所以它们可以说是兄弟。
谢谢
C++的类型系统由内而外确定表达式的类型[1]。这意味着条件表达式的类型在赋值Cardability*
之前确定,编译器只能选择CardabilityBurn*
和CardabilityEmpty*
。
由于C++具有多重继承和一些更可能的转换路径,因为没有一种类型是另一种类型的超类,所以编译就止步于此。
要成功编译,您需要提供缺少的部分:将一个或两个操作数强制转换为基类类型,这样条件表达式作为一个整体就可以采用该类型。
auto* cardAbility = contains
? static_cast<CardAbility*>(new CardAbilityBurn(i))
: static_cast<CardAbility*>(new CardAbilityEmpty );
但是,它有点复杂,所以在这种情况下if
-else
结构更适合。
[1]有一个例外:重载函数名没有定义类型,除非您将它们(隐式或显式)转换为它们的某个版本。
问题内容: Netbeans说我的三元运算符不是语句。怎么会? 我尝试过if / then / else对应项,并且工作正常: 问题答案: 三元运算符中的语句必须是非空的。他们需要退货。
三元运算符 三元运算符 ? 应该只用在它能让代码更加清楚的地方。 一个条件语句的所有的变量应该是已经被求值了的。类似 if 语句,计算多个条件子句通常会让语句更加难以理解。或者可以把它们重构到实例变量里面。 推荐: result = a > b ? x : y; 不推荐: result = a > b ? x = c > d ? c : d : y; 当三元运算符的第二个参数(if 分支)返回和条
问题内容: 如果Python没有三元条件运算符,是否可以使用其他语言构造来模拟一个? 问题答案: 它是在2.5版中添加的。表达式语法为: 第一被评估,则恰好中的任一个a或b进行评估并返回基于所述布尔值。如果为,则被评估并返回但被忽略,否则被评估为返回但被忽略。 这允许发生短路,因为仅当评估为时才进行评估,而b根本不评估,而当为 评估时,仅当评估时就完全不评估。 例如: 注意条件是表达式,而不是语句
如果Python没有三元条件运算符,是否可以使用其他语言构造来模拟一个?
问题内容: 我刚刚开始学习代码(特别是Java),并且我正在测试一个密码系统,在该密码系统中,键入密码时它将变为变量“ password”,并检查其是否等于实际密码password2。这是代码: 我正在尝试检查嵌套的if语句,我输入的密码是否与password2“ Call of Duty”匹配;但问题在于它不适用于字符串。该问题的标题是出现的错误。有人可以帮帮我吗? 问题答案: 比较字符串时,应
在Kotlin中,这个表达式的等价物是什么? 这不是Kotlin中的有效代码。