Control Flow: Conditionals & C++17 If with Initializer (if (init; condition))
1Concept
C++17 introduced if-statements with initializers: if (auto val = calculate(); val > 0) { ... }. This restricts the scope of temporary inspection variables strictly to the if/else block, preventing variable leakage.
2Architecture Diagram
if (auto [iter, inserted] = set.insert(item); inserted) {
// iter and inserted only exist inside this block!
}3Code Example
Stage 0 Language Foundations
#include <iostream>
#include <unordered_map>
#include <string>
int main() {
std::unordered_map<std::string, int> stock = {
{"Laptop", 12},
{"Monitor", 0}
};
// C++17 if-with-initializer
if (auto it = stock.find("Laptop"); it != stock.end() && it->second > 0) {
std::cout << "Item found! " << it->first << " in stock: " << it->second << "\n";
} else {
std::cout << "Item unavailable.\n";
}
return 0;
}4Expected Output
Item found! Laptop in stock: 12
5Key Takeaways
- ✓if (init; condition) keeps scope localized and prevents unintended variable reuse.
- ✓constexpr if (if constexpr (...)) evaluates conditions at compile time in templates.
- ✓Switch statements support enums and integer constants.