簡體   English   中英

使用`auto`作為針對C ++標准的函數參數?

[英]Is use of `auto` for a function argument against the C++ standard?

代碼是這樣的:

auto add(auto a, auto b) { return a + b; }

違反ISO c ++ 14標准? 該標准的未來版本是否允許代碼編寫?

[這]違反了ISO c ++ 14標准嗎?

是的,你無法在C ++ 14(或C ++ 17)中使用auto聲明參數的函數。 此代碼格式錯誤。

該標准的未來版本是否允許代碼編寫?

當前的Concepts TS允許這樣做,它通常被稱為簡潔的函數模板語法。 在Concepts中,含義相當於:

template <class T, class U>
auto add(T a, U b) { return a + b; }

Concepts部分提議還允許使用概念名稱,而不僅僅是auto 關於這是否將成為未來C ++標准的一部分,這是一個懸而未決的問題。


更新:代碼在C ++ 20中有效,並且具有與上面顯示的函數模板相同的含義(注意: ab是獨立推導的)。

如果您希望這意味着您可以將任何類型傳遞給函數,請將其設為模板:

template <typename T1, typename T2> int add(T1 a, T2 b);

或者,您可以使用lambda:

auto add = [](const auto& a, auto& b){ return a + b; };

關於通用(多態)Lambda表達式的提議 但是,通用lambdas是C ++ 14的一個特性。

目前這是無效的,但也許在標准的未來版本中,它將相當於:

template<typename T1, typename T2>
auto add(T1 a, T2 b) {return a + b;}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM