Bonjour à tous,
Aujourd'hui je me suis rendu compte que gcc permettait la compilation d'un code qui comporte une erreur au runtime. J'aimerais savoir comment le compilateur interprète ce code et pourquoi il laisse passer cette erreur.
J'ai deux classes QValues et PQuanta:
J'ai enlevé beaucoup de code mais l'important est que chez moi cela compile et je ne comprend pas pourquoi, je pensais que gcc remplaçait PDT par double et donc ça revient à faire le même calcul que:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 template<typename PDT> class QValues{ public: //la fonction est bidon, je montre juste un fragment du code intéressant void append(const vector<vector<vector<PDT> > >& vvv, pair<PDT,PDT> p_ab){ int n = 0; for(unsigned int nc=1; nc<vvv_val_[n].size(); nc++) { //la ligne suivate ne devrait pas compiler car j'essaie de multiplier un vector<PDT> par un PDT, ce qui n'est pas permis il me semble vvv[n][nc] *= p_ab.first; } } //Voici ma deuxieme classe: class PQuanta : public QValues<double> { }
Or cette opération ne compile pas car l'opérateur *= n'est pas défini pour cette opération, alors pourquoi gcc accepte de compiler l'opération dans le code précédent ? Est-du au paramètre template ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 vector<double> v(10, 5.0); v *= 2;
Merci d'avance de vos réponses![]()
Partager