Sigo siendo un programador novato, sé que la optimización prematura es mala, pero también sé que copiar cosas enormes es malo también.¿Puede el compilador eludir la siguiente copia?
He leído sobre elisión de copia y sus sinónimos, pero los ejemplos en Wikipedia, por ejemplo, me hacen pensar que la elisión de copia solo puede tener lugar si el objeto que se devuelve se devuelve al mismo tiempo que se construye por completo .
¿Qué pasa con objetos como vectores, que generalmente solo tienen sentido cuando se rellenan con algo, cuando se usan como valor de retorno? Después de todo, un vector vacío podría simplemente crearse una instancia manualmente.
Entonces, ¿también funciona en un caso como este?
mal estilo por razones de brevedad:
vector<foo> bar(string baz)
{
vector<foo> out;
for (each letter in baz)
out.push_back(someTable[letter]);
return out;
}
int main()
{
vector<foo> oof = bar("Hello World");
}
tengo ningún problema real utilizando la barra (vector & cabo, cadena de texto), pero la forma anterior se vería mucho mejor, estéticamente, y de la intención.
Puede ser elidido. Tenga en cuenta sin embargo, que la norma hace _still_ exigir al constructor de copia para que sea accesible (por ejemplo, no privado) – sehe