【问题标题】:Assigning an int to a bool for ternary operation将 int 分配给 bool 以进行三元运算
【发布时间】:2016-03-03 14:24:43
【问题描述】:

我是 C++ 新手,并试图了解条件(三元)运算符的工作原理。我熟悉它在 java 中的使用,但对我在 c++ 中看到的一个示例感到非常困惑

int main() 
{
   bool three = 3;
   int x = three ? 3 : 0;
   cout << x << "\n";
   return 0;
}

首先,bool 数据类型如何接受int?第二,int x = three,这不是对x == 3 的分配而不是条件测试吗?还是说,“创建一个名为xint 并分配它3 if three == 3 else 0?”

【问题讨论】:

  • 没有bool 接受int。而且我认为它在 Java 中并没有太大的不同。
  • bool three = 3? @juanchopanza
  • @free_mind 任何等于零的都是false;否则 - true?
  • int x = three ? 3 : 0 不能读作(int x = 3) ? 3 : 0,而是读作int x = (three ? 3 : 0)计算三元表达式three ? 3 : 0(如果three,则返回3为真,如果为假,则为 0),然后为 x 分配此表达式的结果。在这种情况下,three 被分配了 true,因为它被分配了一个非零 int,它被隐式转换。
  • 确实如此。我也不明白-4。鉴于您来自 Java,我可以看到您的困惑。但是由于 Java 奇怪的自动装箱,我认为 Java 条件是 far 陌生的。

标签: c++ ternary-operator


【解决方案1】:

bool three = 3; 隐式转换 3 为bool,因此three 将具有true 的值。 (任何非零数都将转换为true,零转换为false。)

另请注意,三元条件的优先级高于赋值(在 C++ 和 Java 中)。

所以int x = three ? 3 : 0; 等价于int x = (three ? 3 : 0);

int x = (three ? 3 : 0); 因此等价于int x = (true ? 3 : 0); 等价于int x = 3;

【讨论】:

  • 谢谢!我不知道隐式转换。
  • @free_mind - 没有隐式 casting,但有隐式 converting。强制转换是您在源代码中编写的用于告诉编译器进行转换的东西,因此强制转换始终是显式的。转换可以是显式的(即通过强制转换完成)​​或隐式的(由编译器完成,因为语言规则告诉它)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 2011-09-07
  • 2016-07-27
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
相关资源
最近更新 更多