![](/img/trans.png)
[英]Does a placeholder in a trailing-return-type override an initial placeholder?
[英]What is the purpose of a placeholder type in a trailing-return-type?
根據[dcl.fct] / 2 ,下面的代碼段是合法的。 GCC和clang編譯並執行代碼 ,
#include <iostream>
int i = -1;
auto f()->auto&& { return i; }
int main(){
f() = 2;
std::cout << i << '\n';
}
印花
2
但是在C ++中允許這個的目的是什么?
在上面的例子中,只需用int&
替換trailing-return-type就可以得到相同的結果。 換句話說,我正在尋找一個示例,其中包含占位符類型的trailing-return-type將是有意義的。
您可以對一致性進行論證:您可以將其他類型作為尾隨返回類型,為什么不是占位符?
auto f() -> int& { return i; }
auto f() -> auto& { return i; }
你可以對實用程序進行一個論證:lambdas的返回類型看起來像一個尾隨的返回類型,並且沒有其他地方可以放置占位符類型,所以你必須允許它為lambdas,所以不妨允許它用於函數?
auto f = []() -> int& { return i; };
auto f = []() -> auto& { return i; };
您可以對代碼格式進行爭論。 尾隨返回類型允許一致的方式來聲明始終適用於所有情況的函數,因此只需將其排列:
auto g(auto x) -> decltype(f(x)) { ... } // using trailing for parameter
auto Cls::member() -> type { ... } // using trailing for scope (to find Cls::type)
auto h(auto x) -> auto& { ... } // using trailing for formatting
可能還有其他爭論。 但簡而言之,它很容易被允許並且顯然具有優點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.