2016-04-18 11 views
-3

私はグーグルで、解決策を見つけました。C++ 11 auto compile time or runtime?それは、重複しているが完全ではないが、答えはコンパイル時だと述べた。それは本当に時間をコンパイルしていますか?以下の例を考えてみましょう。(私の仮定)をコンパイルしながら、ここで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コンパイル時間または実行時間、あるいはその両方?

+1

'C++ 11でコンパイル時や実行時に型を自動的に推測しますか? ':**コンパイル時**では、テンプレート引数の減算の規則に従います例外はいくつかあります。 – 101010

+1

コンパイル時にコンパイラがすべての型を知っている必要があります。 –

答えて

2

autoはコンパイル時に機能します。

戻り値の型がgive_somethingであることは、コンパイル時に推測できません。そのような場合、コードはコンパイルされません。あなたの例では、このエラーメッセージが表示されます:

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; 
+0

私はコンパイルせず、自分の考えをチェックしませんでした。 –

+1

@jblixrコンパイラが本質的にあなたに答えを与えるので、私は次回にコードをコンパイルしようとお勧めします。 – TartanLlama

+1

'auto'を使うと、関数から2つの異なる型を返すことはできません。 –

関連する問題