Faire circuler des tableaux de taille fixe en C ++?
Fondamentalement, je voudrais faire quelque chose comme ça:
int[3] array_func()
{
return {1,1,1};
}
int main(int argc,char * argv[])
{
int[3] point=array_func();
}
Mais ça ne semble pas légale en C++. Je sais que je peux utiliser des vecteurs, mais depuis que je sais que la taille du tableau est une constante, il semble comme une perte de performance est susceptible de se produire.
Je tiens également à éviter une new
si je peux, parce que l'allocation des trucs sur la pile est plus facile et probablement aussi pour améliorer les performances.
Quelle est la solution ici?
source d'informationauteur static_rtti
Vous devez vous connecter pour publier un commentaire.
À l'aide de C++0x, près de la finalisation de la nouvelle norme C++ (déjà mis en œuvre dans la dernière version de gcc et de msvc IIRC), vous pouvez le faire exactement comme vous le souhaitez! Simplement utiliser std::array au lieu de int[3].
Mettre le tableau dans une structure (struct).
boost::array
est un package:Rapide et sale:
Remarquez comment vous pouvez utiliser l'agrégat syntaxe d'initialisation.
Vous pouvez l'envelopper dans un
struct
pour le rendre remboursable par valeur:Je ne pense pas que vous pouvez utiliser la syntaxe d'initialiseur de tableau directement dans l'instruction de retour. Bien sûr, vous pouvez introduire un constructeur (les structures sont simplement des classes avec tous les membres du public, après tout):
vous ne pouvez pas retourner un tableau de taille fixe en C++. vous pouvez retourner un pointeur sur int (qui sera utilisé comme un tableau), mais qui aurait besoin d'allouer le tableau sur le tas à l'aide de
new
.de toute façon, vous pouvez passer votre tableau comme argument à votre fonction:
toutefois, cela ressemble plus à C qu'en C++...
boost::array est un wrapper pour une pile de tableau.
Noter que l'allocation de pile ne va rester moins cher que d'utiliser le "nouveau" lorsque vous n'êtes pas avoir à copier les tableaux grand autour de.