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 var auto condition 中的      更新时间:2023-10-16

在C++11中,当我写这篇文章时,xy的类型是什么?

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,因为它是文本11.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类型。