假设操作符?:
三进制操作符一般形式如下:
expression1? expression2:expression3 |
对于第一个操作-"expression1"-任何表达式在布尔型中值都可以用。如果结果是true,那么第二个操作的操作符,例如 "expression2",就被执行。
如果第一操作是false,第三操作-"expression3"-就被执行。第二和第三操作,例如 "expression2"和"expression3"应该返回第一类型值,不应该是空类型。执行假设操作符的结果就是expression2的结果或者expression3的结果,都取决于 expression1。
//--- 一天中开盘价和收盘价的标准化不同点 |
输入等同于如下:
double true_range; |
操作符使用限制 #
基于"expression1"值,操作符必须返回两个值中的一个 - 或者"expression2"或者"expression3"。对这些表达式有几个限制:
- 不要混淆 简单类型 或 枚举类型 的用户定义类型。 NULL 可能被用于指针.
- 如果值是简单类型,操作符将会是最大类型(请见类型转换 )。
- 如果一个值是枚举类型而第二个值是数字类型,那么枚举类型被整型所取代并实施第二个规则。
- 如果两个值都是枚举类型,它们的类型必须完全相同,并且操作符将是枚举类型。
限制用户定义类型(类或结构):
- 类型必须完全相同或者一个应该源自另一个。
- 如果类型不相同(继承类型),那么子类型会隐式转换至父类型,例如操作符将成为父类型。.
- 不要混淆对象和指针 - 两个表达式都是或是对象或是 指针。 NULL 不能用于指针。
注意
谨慎使用条件操作符当做重载函数的论据, 因为条件操作符的结果类型在程序编译时定义。并且该类型定义为较大的"expression2"和"expression3"。
示例:
void func(double d) { Print("double argument: ",d); } |
另见
变量初始化 , 可见范围和变量使用期 , 创建和删除对象