Bonjour/Bonsoir,
nous avons dernièrement rencontré un phénomène "intéressant" du language C++ qui nous a causé par mal de bug.
Le problème est illustré avec le code suivant :
Les 'expression result unused' sont donnés par le compilateur avec les bonnes options de compilation pour les warnings.
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
20
21
22
23
24
25
26
27
28 #include <iostream> class SomeClass { public: // Quelques constructeurs... SomeClass(int, int, int) { std::cout << "3 int" << std::endl; } SomeClass(int, int) { std::cout << "2 int" << std::endl; } SomeClass(int) { std::cout << "1 int" << std::endl; } }; // Et une petite fonction. void foo(SomeClass) { std::cout << "bar" << std::endl; } int main (int argc, const char * argv[]) { // Affichage : SomeClass o3(0, 0, 0); // 3 int SomeClass o2(0, 0); // 2 int SomeClass o1(0); // 1 int SomeClass p3 = (0, 0, 0); // 1 int // ^ expression result unused foo((0, 0)); // 1 int \n bar // ^ expression result unused return 0; }
Je me demandais si l'un d'entre vous saurais m'indiquer quelle section de la norme explique ce comportement.
Merci d'avance à vous pour assouvir ma curiosité! :-)
Partager