2012-10-10 38 views
1

我剛剛看過斯科特邁耶斯Universal References in C++11,有一件事我不明白。自動類型扣和自動&&對比汽車

我對auto作爲「通用參考」(即auto&&)和常規auto之間的區別有何困惑?

Foo f; 
Foo& lvr = f; 

auto lvr_a = f; // Foo& 
auto rvr_a = std::move(f); // Foo&& or is it Foo? 

auto&& lvr_b = f; // Foo& && => Foo& 
auto&& lvr_b = std::move(f); // Foo&& && => Foo&& 

回答

2

自動將衰減到的值類型(即採取與拷貝構造副本),而自動& &將保留引用類型。

在這裏看到:C++11: Standard ref for action of `auto` on const and reference types

auto rvr_a = std::move(f); // Foo&& or is it Foo? 

這只是Foo。因此,這是相同的:

Foo rvr_a = std::move(f); // Foo&& or is it Foo? 

但請注意,如果有一個,這將仍然調用移動構造函數。

+0

'auto && rvr_b = std :: move(f)'調用移動構造函數嗎? – ronag

+1

@ronag編號淨效應是參考綁定。 –

+0

@ronag:看到這裏:http://stackoverflow.com/questions/9657708/c11-the-range-based-for-statement-range-init-lifetime –