C++11 中的"auto var = {condition} ? 1 : 1.0"是什么类型?是双精度还是整数?
What is the type of "auto var = {condition} ? 1 : 1.0" in C++11? Is it double or int?
在C++11中,当我写这篇文章时,x
和y
的类型是什么?
int main()
{
auto x = true ? 1 : 1.0;
auto y = false ? 1 : 1.0;
std::cout << x << endl;
std::cout << y << endl;
return 0;
}
类型将是double
,因为它是文本1
和1.0
的常见类型。
有一种简单的方法可以使用typeid
:进行测试
#include <iostream>
#include <typeinfo>
using namespace std;
int main() {
auto x = true ? 1 : 1.0;
cout << typeid(x).name() << endl;
return 0;
}
这将在我的GCC版本上输出d
。运行echo d | c++filt -t
然后告诉我们d
对应于类型double
,正如预期的那样。
根据C++标准(5.16条件运算符)中条件运算符的描述
6左值到右值(4.1),数组到指针(4.2),以及函数到指针(4.3)的标准转换在第二和第三操作数。在这些转换之后以下内容适用:
--第二和第三操作数具有算术或枚举类型;执行常见的算术转换以将它们转换为通用类型,结果就是该类型。
和(5个表达式)
10许多期望算术或枚举类型导致类似中的转换和生成结果类型方法目的是生成一个通用类型,该类型也是结果这种模式被称为常用算术转换,其定义如下:
--否则,如果其中一个操作数是双操作数,则应转换另一个加倍
在条件运算符的两种用法中,其中一个操作数是类型为double-1.0
的浮动文字(C++标准:除非由后缀明确指定,否则浮动文字的类型为double。)
auto x = true ? 1 : 1.0;
auto y = false ? 1 : 1.0;
因此,另一个操作数也将转换为double类型,并且表达式的结果具有double类型。
相关文章:
- 静态自动 constexpr t = { "red" , "black" , "green" } 是什么类型;派生到?
- 这是什么类型的C++语法,我应该采取什么步骤来理解这一点
- 这在C++是什么类型的错误?
- int(int)& 或 int(int) const &是什么类型?
- 我如何找出3D容器的元素是什么类型
- 在 c 和 c++ 中,二维数组的元素是什么类型?
- 这个 lambda 的参数是什么类型?
- 转换逻辑目标是什么类型
- 如果我创建一个修改值的迭代器,静态成员"reference"应该是什么类型?
- 这是什么类型的行为
- 给定以下内容,"function"是什么类型?
- C++:文本文件中的数据是什么类型的
- C++11 中的"auto var = {condition} ? 1 : 1.0"是什么类型?是双精度还是整数?
- C++中的 decltype(this) 是什么类型
- 如何知道模板<类型名称类型>是什么类型?
- 内置数组的大小是什么类型?
- c++ 11中的std::chrono::high_resolution_clock::now()是什么类型?
- 在Microsoft Visual C++中,光线跟踪器应该是什么类型的项目
- 如何为delete编写一个C包装器,既快速又释放给定的任何类型,而不告诉它是什么类型
- 如何编写一个函数,无论数组是什么类型都输出它