Les parenthèses et la norme C++
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 :
Code:
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;
} |
Les 'expression result unused' sont donnés par le compilateur avec les bonnes options de compilation pour les warnings.
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é! :-)