C++ 在C+中是否在编译时或运行时自动推断类型+;11?

C++ 在C+中是否在编译时或运行时自动推断类型+;11?,c++,c++11,compilation,c++14,C++,C++11,Compilation,C++14,我在谷歌上搜索并在stackoverflow中找到了一个解决方案。它是一个副本,但不是全部,答案是有编译时间。它真的是编译时吗?让我们考虑下面的例子。 auto give_something(bool mybool) { if (mybool) return string("auto"); return 6.66f; } int main() { bool mybool = (rand() % 2) ? true : false; auto x

我在谷歌上搜索并在stackoverflow中找到了一个解决方案。它是一个副本,但不是全部,答案是有编译时间。它真的是编译时吗?让我们考虑下面的例子。

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
类型和
返回类型给出了一些在编译时无法推断的
(我的假设)。只能在运行时推导。所以
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;
main.cpp:8:5:错误:返回类型中的“auto”在此处推导为“float”,但在此处推导为
在前面的返回中作为“std::uucxx11::basic_string”
陈述
返回6.66f;

在C++11中是否在编译时或运行时自动推断类型?
:在编译时,它遵循模板参数推断的规则,只有少数例外。编译时编译器必须知道所有类型。我没有编译并检查我的想法。@jblixr我建议下次尝试编译代码,因为编译器基本上会给出答案。所以使用
auto
我不能从一个函数返回两种不同的类型。@jblixr Nope。您根本无法从函数返回不同的类型。