2017-05-29 21 views
3

自動引数は内部的にどのように機能しますか?

#include <cstdio> 

auto f(const auto &loc){ 
    printf("Location: %p\n", &loc); 
} 

int main() 
{ 
    auto x {1}; 
    auto y {2.3}; 
    f(x); 
    f(y); 
} 

g++ -std=c++14 dummy.cpp

質問でコンパイル、コードを検討:テンプレート関数について

、型を明示的にコンパイル時に(f<int>(2))記載されています。

関数fはどのように異なる型の引数を受け入れますか? Concept Technical Specification「関数」

auto f(const auto &loc){ 
    printf("Location: %p\n", &loc); 
} 

の下

+1

コンパイル時にすべてが分かっています。だから質問は何ですか? – Walter

+1

"テンプレート関数の場合、型は明示的に言及されています" - 必ずしもそうではありません。関数テンプレート呼び出しは、関数引数からテンプレートパラメータを推定することができます。 – aschepler

答えて

8

は事実template(略し関数テンプレート宣言)にあり、

template<typename T> 
void f(const T&loc){ 
    printf("Location: %p\n", &loc); 
} 

注意を(よりも読みますが短く、簡単に)に相当しますしかし、autoを使用しているフォームは、C++標準の一部ではなく、概念と制約についてはConcept Technical Specificationであり、非常に強力です(AFAIKはG NUのgccバージョン6.1以上、オプション-fconcepts)。

+0

'template'構文と同等であれば、いずれかの構文を好む推奨はありますか? – overexchange

+0

'template'構文と同等であれば、どちらの構文が優先されますか(推奨)? – overexchange

+1

@overexchange:*標準* C++を推奨することをお勧めします。そして、Conceptsが標準になるまで、その構文は* legal * C++ではありません。 –

関連する問題