Lorsque nous avons deux opérateurs pour la sortie d'un objet et un tableau de ces objets, et essayez de sortie tableau d'objets constants, l'opérateur pour les objets est impliqué. Est-il possible de forcer l'opérateur pour les tableaux à travailler avec des tableaux d'objets constants?sortie de const pointeur et tableau const
Exemple de code:
#include <iostream>
#include <cstddef>
using std::size_t;
namespace nm
{
struct C { int i; };
template <size_t N>
using c_c_array = C[N];
inline std::ostream& operator << (std::ostream& lhs, C const*) { return lhs << "1\n"; }
template <size_t N>
inline std::ostream& operator << (std::ostream& lhs, c_c_array<N> const&) { return lhs << "2\n"; }
}
int main()
{
nm::C c{1};
nm::C arr[5];
nm::C const c_const{1};
nm::C const arr_const[5] {{1}, {1}, {1}, {1}, {1}};
std::cout << &c // 1 - ok
<< arr // 2 - ok
<< &c_const // 1 - ok
<< arr_const; // 1 --ups
return 0;
}
sortie: 1 2 1 1
En outre, l'opérateur 2 dans mon cas utilise 1 pour la sortie.
Ajouter initialiseurs à votre code afin que les gens cessent de répondre à la mauvaise question, par exemple 'c_const {};' et 'arr_const [5] {};' – Rostislav
peu importe comment il est inicialized du tout pour la demande question. S'il s'agit d'un opérateur non officiel ou inalisé, l'opérateur 1 sera appelé. Ceci est juste un échantillon, je n'utilise pas cette constante pour rien, seulement pour illustrer l'ordre dans lequel les opérateurs ont appelé –
Ugh. Voyez-vous les réponses que les gens vous donnent? Est-ce ce que vous cherchez? – Rostislav