Thread overview
& vs std::ref
Apr 24, 2018
hsencan
Apr 24, 2018
kerdemdemir
Apr 25, 2018
hsencan
April 24, 2018

Merhaba,

Ben "&" ile std::ref arasındaki farklar nelerdir ? Ben daha önce hep aynı sanıyordum. Ama aşağıdaki kodda "&" olmasına rağmen "c" parametresine "ref()" koymazsak değer değişmiyor.

#include <iostream>
#include <functional>
using namespace std;

void foo(int x, int y,int &z) {
	z = x + y;
}
int main() {
	int a = 5, b = 7, c=0;
	function<void()>bFoo = bind(foo, a, b, c);

	bFoo();
	cout << c << endl;

}

İyi Çalışmalar

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 25, 2018

Merhaba,

Ben surda

https://github.com/kerdemdemir/sharpEar/blob/e8c607defdd0489e1b4e058983e25bad6773edda/utility/types.h

ve surda

https://github.com/kerdemdemir/sharpEar/blob/6193fad5a776b246caed72d89009d64afc1db5a0/environment/roomOracle.cpp

Su sekilde kullanmistim. Bu std::ref ' i (aslinda std::ref'i degil ama std::ref'in yarattigi std::reference_wrapper' i )

using SoundDataRef = ref_t<SoundData>;
void roomOracle::preprocess(const std::vector< SoundDataRef > &input, int packetCount )

Benim cektigim sikinti bu referanslara atamayi hayata getirme aninda yapmamiz gerekmesinden kaynaklaniyordu.

Yani

int c;
int &a; // Dedigimizde derlenmiyor.
a = c // :(
int& b = c; //Dememiz gerekiyor

Bu std::reference_wrapper icin ayni degil

int c;
std::reference_wrapper<int>a;
a = std::ref(c); //yuppi : )

Diyelimki pointerlardan kacinmak istiyorsun (benim durumum bu idi pointerdan olasi kacinma durumlarini tartismistik galiba) ve referenslari tercih ediyorsun.

ama su mumkun degil sebebi ise dolayli olarak yukarda belirtigimiz durum :

void foo(std::vector<int&> param):

bu gibi durumlarda std::ref yardimci oluyor ve ornegimdeki gibi referans kullanabiliyor oluyoruz.

void foo (std::vector<std::reference_wrapper> param )

Bu std::ref fonksiyonuda std::reference_wrapper donuyor kendisine verilen tur ile.

Erdemdem

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 25, 2018

Çok güzel açıklamışsınız. Teşekkürler

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]