Maison >développement back-end >C++ >Pourquoi ne puis-je pas attribuer directement un tableau à un autre en C ?
Les tableaux en C présentent un comportement particulier, dont l'un est leur assignabilité restreinte. Voyons pourquoi l'attribution d'un tableau à un autre est interdite, comme illustré par le code suivant :
int numbers[5] = {1, 2, 3}; int values[5] = {0, 0, 0, 0, 0}; values = numbers; // Error: C2106
Ce code génère l'erreur "erreur C2106 : '=' : l'opérande gauche doit être la valeur l", signalant une tentative d'affectation à un objet non modifiable.
L'erreur survient parce que les tableaux en C sont considérés comme non modifiables ou non attribuables, principalement en raison à une compatibilité ascendante avec C. L'attribution d'un tableau à un autre nécessiterait de copier tous ses éléments, ce qui est très inefficace et sujet aux erreurs.
Au lieu de cela, C encourage l'utilisation de conteneurs de la bibliothèque de modèles standard (STL), comme std :: array ou std :: vector, qui fournissent des fonctionnalités de type tableau efficaces et sécurisées. Par exemple, en utilisant std::array pour obtenir la fonctionnalité souhaitée :
#include <array> std::array<int, 5> numbers = {1, 2, 3}; std::array<int, 5> values = {}; values = numbers; // No error!
Dans le cas de tableaux primitifs (comme celui du code original), vous pouvez copier manuellement des éléments à l'aide d'une boucle ou exploiter l' std::copy function:
#include <algorithm> int numbers[5] = {1, 2, 3}; int values[5] = {}; std::copy(numbers, numbers + 5, values);
De plus, le code fourni montre un raccourci pour initialiser le tableau de valeurs avec des valeurs vides, en tirant parti d'une règle C qui ne fournit pas d'initialiseurs entraîne une initialisation de la valeur à zéro. Par conséquent, les deux extraits de code suivants sont équivalents :
int values[5] = {0, 0, 0, 0, 0}; int values[5] = {};
En comprenant ces nuances, vous pouvez éviter les erreurs d'affectation et travailler efficacement avec des tableaux en C .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!