C++ cli 系统上的三元运算符::布尔变量

C++ cli 系统上的三元运算符::布尔变量,c++-cli,C++ Cli,如何将三元运算符与System::Boolean一起使用?此示例代码始终返回true: bool Test(Boolean^ value) { return value ? true : false; } 回答我自己早熟的问题,此代码有效: bool Test(Boolean^ value) { return (bool)value ? true : false; } 编辑:更好(并遵循Hans和Matt的建议)此代码工作得更好: bool Test(Boolean value) {

如何将三元运算符与System::Boolean一起使用?此示例代码始终返回true:

bool Test(Boolean^ value)
{
  return value ? true : false;
}

回答我自己早熟的问题,此代码有效:

bool Test(Boolean^ value)
{
  return (bool)value ? true : false;
}
编辑:更好(并遵循Hans和Matt的建议)此代码工作得更好:

bool Test(Boolean value)
{
  return value ? true : false;
}
或者,因为Boolean和bool是可转换的,所以这也是很好的代码,它依赖于其他地方发生的自动转换。除了显示三元运算符外,示例没有什么意义:

bool Test(bool value)
{
  return value ? true : false;
}

首先,您使用的
System::Boolean
是错误的,它与三元运算符无关。切勿将值类型作为引用传递


如果不考虑不必要的惩罚,答案中的代码将起作用,但在C#中则不起作用。当您想调用
bool Test(Boolean^value)
函数时,编译器会发出抱怨。因为C#中没有引用值类型的概念。

布尔值是一种值类型。将它的盒装副本作为参数传递是毫无意义的。当然,由于对象从来都不是null ptr,所以会导致代码失败。把它放回bool只会无缘无故地消耗cpu周期。删除^Boolean在C++/CLI中自动转换为bool,那么为什么要使用三元运算符呢?如果按照Hans的建议删除“^”,则只需返回
。按照Hans的建议--不要这样做,您将招致不必要的装箱和拆箱处罚。