Ho paio di domande su Eigen:Spostare la semantica in Eigen
Qualcuno sa se c'è qualche piano per sostenere la semantica spostare in Eigen in qualunque momento presto? Impossibile trovare nulla nell'elenco TODO della pagina Web Eigen3. In questo momento sto usando la
swap
trucco per sbarazzarsi di provvisori, comeMatrixXd foo() { MatrixXd huge_matrix(N,N); // size N x N where N is quite large // do something here with huge_matrix return huge_matrix; } MatrixXd A(N, N); A.swap(foo());
Mi piacerebbe molto scrivere quanto sopra
swap
linea in stile C++ 11 comeA = foo();
e non doversi preoccupare del temporaneo restituito da
foo()
.- Un compilatore C++ 98/C++ 03 può ottimizzare il codice
A = foo();
per eliminare temporaneamente questo codice? O la scommessa più sicura è usareswap()
?
Grazie, non ero sicuro di questo. In particolare, il mio 'foo' prende' A' come parametro di riferimento const, quindi in pratica ho qualcosa come 'A = foo (A)'. Copia elision dovrebbe funzionare anche in questo caso, poiché la regola as-if è soddisfatta, è corretto? – vsoftco
Nel mio frammento di codice, sembra che la copia elision sia effettivamente eseguita dal copione, in una riga come 'MatrixXd A = foo()'. Tuttavia, NON viene eseguito dall'operatore di assegnazione, ogni volta che riuso 'A' come' A = foo(); ', e passo per valore all'operatore di assegnazione. – vsoftco
Ohh Capisco perché, perché stavo usando un 'cout' nell'operatore di assegnazione, e questo ha un effetto osservabile, quindi non è elidato (anche se i copy ctors sono) http://stackoverflow.com/a/18610251/3093378 – vsoftco