forwarding-reference

    1熱度

    2回答

    與函數,可以寫成: template <class T> void f(T&& x) {myfunction(std::forward<T>(x));} 但有拉姆達,我們沒有T: auto f = [](auto&& x){myfunction(std::forward</*?*/>(x));} 如何做到完美轉發在拉姆達? decltype(x)是std::forward的類型嗎?

    23熱度

    2回答

    該函數的自變量將結合到一個rvalue參考: void f(int && i); 然而,一個參數這個功能將結合到任何一個rvalue或左值參考: template <typename T> void f(T && t); 我經常已經聽說這被稱爲通用參考。 我也聽說它被稱爲轉發參考。 他們的意思是一樣的嗎? 如果函數體調用std::forward,它只是一個轉發參考嗎?

    2熱度

    2回答

    我明白,一個轉發參考是「一個rvalue參照CV-不合格模板參數」,如在 template <class T> void foo(T&&); 這意味着上述功能可以採取兩個升值和r值參考。 有些東西我不明白,例如 template <class T> class A { template <class U> void foo(T&& t, U&& u) {

    0熱度

    1回答

    我有這樣 template <typename... Args> void foo(Args&&... args); 一個功能,我需要在與默認參數的末尾添加一個額外的參數。由於組需要最後來了,我想改變功能的,以 template <typename... Args> void foo(std::tuple<Args&&...> args, const std::str

    0熱度

    1回答

    我寫了這段代碼並用gcc編譯。 我希望得到結果「2」,但結果是「0」。 其他編譯器clang和vc打印「2」。 它是未定義的行爲還是不行? #include <stdio.h> struct Test { Test& inc() { ++value; return *this; } int value = 1; }; int mai

    0熱度

    1回答

    我試圖找出一種方法來捕獲一個可以由l和r值引用組成的可變數據包,並通過引用捕獲l值來捕獲r值,供以後使用(因此異步測試)。我嘗試了以下操作: #include <iostream> #include <tuple> #include <future> template<typename... T> auto bar(T&&... values) { return [tup =

    17熱度

    3回答

    右值引用和轉發引用之間的區別作出足夠清楚在這個例子斯科特邁爾斯: Widget&& var1 = someWidget; // here, 「&&」 means rvalue reference (1) auto&& var2 = var1; // here, 「&&」 does not mean rvalue reference (2) template<typename T>

    16熱度

    3回答

    想象以下簡化的代碼: #include <iostream> void foo(const int& x) { do_something_with(x); } int main() { foo(42); return 0; } (1)優化之外,當42被傳遞到foo會發生什麼? 編譯器是否在某個地方(在堆棧上?)將其地址傳遞給foo? (1a)標準中是否有任何規定在這種情況下要做什麼(或嚴

    4熱度

    3回答

    讓foo是函數: template< typename T > void foo(T&& a){} 什麼類型將T推斷爲foo以下呼叫: foo(0); // is T here int or int&& ? int a = 0; foo(a); // is T here int or int& ?

    1熱度

    1回答

    最近,我正在與學生討論限制類型的可能性使用轉發引用。我知道通過is_same與static_assert或enable_if一起比較類型,但我們也談到了顯式模板實例化。 下面的例子對我的作品與GCC: f.h: template <typename T> void f(T&& param); // declaration f.cpp: #include <iostream> tem