template<typename T>
void func(T* arr, size_t length)
{
size_t size_half = length/2;
T* left = arr, right = arr + size_half; // Cannot initialize a variable of type 'int' with an rvalue of type 'int *'
}
Il me semble que le compilateur pense que right est de type int au lieu de int *, pourquoi?Pourquoi cette syntaxe d'initialisation illégale?
Eh bien, cela devient aussi dans l'ensemble où placer l'argument de la syntaxe du pointeur :) La façon dont je pensais à ce sujet était int * comme son propre type , tout comme le double * et le double sont des types, j'ai toujours placé le * sur la gauche. J'ai été influencé pour commencer à placer le pointeur vers la droite maintenant, pour des situations comme celle-ci. –
@FranciscoAguilera La vraie solution consiste à s'en tenir à une seule déclaration par ligne. Mettre le pointeur sur la droite a aussi l'air ridicule. Malheureusement, cette syntaxe merdique est héritée de C. – juanchopanza
Une solution courante qui évite l'ambiguïté est de faire quelque chose comme: 'typedef T * pointer; 'et ensuite' pointer left = ..., right = ...; ' – Photon