ho letto un paio di messaggi su come restituire un vettore da un metodo comprendono questi:Come restituire un vettore membro della classe in C++ 11
e sto ancora confuso su come passare un vettore nel modo giusto in VS2013 e quali sono le differenze tra i metodi riportati di questo codice (le domande sono contrassegnati nei commenti):
class Foo{
private:
std::vector<int> vect;
public:
//1 - classic way?
void GetVect(std::vector<int>& v)
{
v = vect;// assignment with swap?
}
//2 - RVO?
std::vector<int> GetVect()
{
return vect;
}
//3 - RVO with const?
std::vector<int> GetVect() const
{
return vect;
}
//4 - just move?
std::vector<int> GetVect()
{
return std::move(vect);
}
//5 - move with {}?
std::vector<int> GetVect()
{
return { std::move(vect) };
}
}
Quindi non sono sicuro che // 1 sia una forma esplicita di // 2, non sono sicuro che 3 funzioni. Quali sono le differenze tra 4 e 5? Come testarlo se RVO lavora per vettori in VS2013?
Sono confuso. Perché sei preoccupato di copiare elision e spostarti quando il tuo 'GetVect()' implica che si tratta di una funzione getter? –
Does 'Foo' è il vettore? 'GetVec' dovrebbe consentire l'accesso in sola lettura al vettore? Dovrebbe permettere di scrivere sul vettore? Dovrebbe trasferire la proprietà? Le risposte a queste domande sono importanti per progettare correttamente la classe. – MadScientist
Vuoi semplicemente esporre il reale 'std :: vector' oi suoi valori? Cioè è importante per te passare per riferimento? – Mario