如何确定表达式值的类型
How to determine type of the value of an expression?
1)当语句(例如
)cout << 3.0 + 3 ;
是制造的,如何知道传递给cout的值是int还是float?
都不是。这是双重的。3.0
具有双重型,并且3
被提升为加倍以增加添加。将双倍添加到双倍的结果是双重。这与结果所做的事情无关。
有一堆Ostreams的超载移位运算符,右侧有一个double的参数,所以这就是所谓的:
template <class Elem, class Traits>
basic_ostream<Elem, Traits>& basic_ostream<Elem, Traits>::operator<<(double d);
对于它的价值,这是成员函数,而不是免费功能。
它通过利用过载
来实现此目的ostream& operator<<(ostream& output, int i) {
// It's an int
}
ostream& operator<<(ostream& output, float f) {
// it's a float
}
C 编译器将根据输入类型选择<<
操作员的适当过载。如果您通过float
,它将选择具有float
的过载,而int
3.0 + 3
操作的结果是双重的,因此COUT将应用&lt;&lt;双重类型的操作员。
您可以将步骤用于调试器的功能来确定这一点。它将输入哪种cout方法是您的答案
相关文章:
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 表观调用前面的表达式必须具有指向 func 类型的指针
- 数组类型 int[n][n] 不可赋值,因为表达式必须具有常量值
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- 表达式必须具有类类型 vs.
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 非类类型表达式的静态类型与动态类型之间的差异
- 如何确定涉及 C++ 中除法的算术表达式的数据类型
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 带有数组类型表达式的错误分配
- 表示函数参数的元组的类型表达式
- 如何确定撤销类型表达式的更大类型
- c++ 11中有新的函数类型表达式格式吗?