在C++11中,在编译时或运行时自动推导类型

Does auto deduce types in compile time or run time in C++11?

本文关键字:类型 运行时 C++11 编译      更新时间:2023-10-16

我在谷歌上搜索并在stackoverflow C++11中找到了一个自动编译时或运行时的解决方案?。这是一个重复,但不是完全,答案说有编译时间。它真的是编译时吗?让我们考虑下面的例子。

auto give_something(bool mybool)
{
    if (mybool)
        return string("auto");
    return 6.66f;
}
int main()
{
    bool mybool = (rand() % 2) ? true : false;
    auto x = give_something(mybool); // how type of x is deduced?
    return 0;
}

在编译时,无法推导出x的类型和give_something的返回类型(我的假设)。它只能在运行时推导出来。那么auto编译时还是运行时呢?

auto在编译时工作。

give_something的返回类型不能在编译时推导出来,这是正确的。在这种情况下,您的代码将不会编译。Clang为您的示例提供了以下错误消息:

main.cpp:8:5: error: 'auto' in return type deduced as 'float' here but deduced 
                      as 'std::__cxx11::basic_string<char>' in earlier return 
                      statement
    return 6.66f;