Y a-t-il une différence pratique entre std::array<const T, N>
y const std::array<T, N>
?
Il semble que les tableaux non constants contenant des éléments constants ne peuvent toujours pas être échangés ; l'opérateur d'affectation ne fonctionne pas non plus.
Quand dois-je préférer l'un à l'autre ?
#include <array>
std::array<const int, 5> array_of_const = {1,2,3,4,5};
std::array<const int, 5> array_of_const2 = {1,2,3,4,5};
const std::array<int, 5> const_array = {1,2,3,4,5};
const std::array<int, 5> const_array2 = {1,2,3,4,5};
int main()
{
// Assignment doesn't work for either
array_of_const = array_of_const2;
const_array = const_array2;
// Swapping doesn't work for either
array_of_const.swap(array_of_const2);
const_array.swap(const_array2);
// Indexing...
array_of_const[0] = 0;
const_array[0] = 0;
return 0;
};
3 votes
@DrewDormann Oui, je suis d'accord. Je ne vois aucune bonne raison de les utiliser,
0 votes
Beaucoup de gens semblent détester les questions [de juristes spécialisés dans les langues] sans signification pratique claire.
2 votes
@KarlKnechtel
[language-lawyer]
n'est pas ajouté par le PO en fait1 votes
Je ne vois pas pourquoi cela a beaucoup de upvote. (les premiers sont probablement des votes d'équilibre (ce que je trouve mauvais) je suppose).
2 votes
@ildjarn quelles "différences pratiques énormes et évidentes" ? Je n'en vois aucune.
1 votes
Les seules choses auxquelles je peux penser sont (1) les implications du rejet
const
et (2)T
étant un type de pointeur.2 votes
@wooc à la défense d'ildjarn ce n'est pas le le plus clair exemple. J'ai d'abord pensé qu'il s'agissait également de souligner une différence.
1 votes
Envisagez d'élargir l'exemple puisqu'il montre chaque type côte à côte par accès : godbolt.org/z/WjovbcMsn