2017-05-29 33 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如何接受不同類型的參數?

+1

這裏所有的東西在編譯時都是已知的。那麼問題是什麼? – Walter

+1

「對於模板函數,類型明確提及」 - 不一定。函數模板調用通常可以從函數參數中推導出模板參數。 – aschepler

回答

8

Concept Technical Specification的「功能」

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

,其實是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

@overchange:推薦使用*標準* C++。直到概念成爲標準,那個語法就是*不合法的C++。 –