具有混合数据类型的条件运算符
Conditional operator with mixed data types?
条件运算符无法处理混合数据类型,因此:
bool cond = true;
cout << (cond?1:2) << endl;
cout << (cond?"msg1":"msg2") << endl;
cout << (cond?1:"msg") << endl;
在最后一行,我收到了错误消息:
错误:不兼容的操作数类型('in'和'const-char*')
有没有一种方法可以使用一行代码在这样的语句中混合不同的类型?我需要把它放在一个预处理器宏中。
编译器:clang 3.5
对于最后一条语句,您可以确定常见类型,如std::string
。
例如
std::cout << ( cond ? std::to_string( 1 ) : "msg" ) << std::endl;
问题在于:运算符会导致赋值操作,因此它只能将值分配给单个类型,并且在编译时不可能确定应该使用哪一个类型,因为代码的分支就像使用if语句一样。想象一下,一个方法在一种情况下返回字符串,在另一种情况中返回int,这是不可能的。你能做的是,你可以像来自莫斯科的@Vlad建议的那样,把类型弄平。
<运算符会针对不同的数据类型进行重载,编译代码时,编译器会确定要调用的重载函数。这就是为什么不能有一个返回不同可能数据类型的函数:编译器不能以这种方式选择正确的重载。
因此,将(cond?result1:result2)视为一个与其他函数一样只需要一种返回类型的函数。
如果你给出一个更清楚的例子来说明你到底想做什么,那么帮助你可能会更容易!
干杯
语句(cond?1:"msg")
在编译过程中会自行导致失败。
设a = (cond?1:"msg")
编译器将翻译类似于此的此表达式
if cond then
a = 1
else
a ="msg"
正如我们所看到的,分配给a
的值的类型从if变为else。但是,如果您使用的是支持类型更改的动态语言,那么它将是有效的。
所以你应该使用cout<<(cond?std::to_string( 1 ):"msg");
相关文章:
- 有条件地选择带有 decltype() 和三元运算符的类型
- 在C++中,运算符 sizeof 返回什么数据类型?
- 运算符重载以显示用户定义的数据类型
- 将运算符<<与隐式转换的非基本数据类型一起使用时出错
- 如何将模运算符与其他数据类型一起使用
- 具有临时对象的 Fundamenta 数据类型赋值运算符
- C 模板:如何根据数据类型有条件编译不同的代码
- 运算符重载中变量的数据类型和范围应该是什么
- 如何在C++中为integer、float和double数据类型同时重载运算符
- 具有相同基础类类型的条件运算符
- 在 C++ 和 FF SS 运算符中配对数据类型
- 条件运算符的返回类型和两阶段查找
- C++模板元编程:模板类型上的编译时条件运算符
- 使用三元条件运算符时操作数类型不兼容
- 具有混合数据类型的条件运算符
- C++:重载 = 运算符以创建uint8_t兼容的数据类型
- 为什么在条件运算符(?:)中,第二个和第三个操作数必须具有相同的类型
- 重载赋值运算符:不同的数据类型-不可能
- 如果数据类型不同,则进行条件编译
- C,C++,数据类型,运算符和表达式