Voici un exemple démontrant la non utilisation typique d'une variable déclarée dans une si la condition.
Type de variable est int &
qui est à la fois convertibles en un booléen et utilisable dans le puis et d'autre des branches.
#include <string>
#include <map>
#include <vector>
using namespace std;
vector<string> names {"john", "john", "jack", "john", "jack"};
names.push_back("bill"); // without this push_back, my g++ generated exe fails :-(
map<string, int> ages;
int babies = 0;
for (const auto & name : names) {
if (int & age = ages[name]) {
cout << name << " is already " << age++ << " year-old" << endl;
} else {
cout << name << " was just born as baby #" << ++babies << endl;
++age;
}
}
la sortie est
john was just born as baby #1
john is already 1 year-old
jack was just born as baby #2
john is already 2 year-old
jack is already 1 year-old
bill was just born as baby #3
Malheureusement, la variable dans la condition ne peut être déclarée avec le '=' syntaxe de déclaration.
Cela exclut d'autres peut-être utile de cas de types avec un constructeur explicite.
Par exemple, l'exemple suivant, à l'aide d'un std::ifstream
ne compile pas ...
if (std::ifstream is ("c:/tmp/input1.txt")) { // won't compile!
std::cout << "true: " << is.rdbuf();
} else {
is.open("c:/tmp/input2.txt");
std::cout << "false: " << is.rdbuf();
}