Namespaces and Organization
Nested Namespaces
C++17 can define nested namespaces with a compact outer::inner spelling.
nested namespace
Nested namespaces organize names into levels, such as `school::grades`.
Nested Namespaces
nested_namespaces.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#include <string>
namespace school::grades {
std::string letter(int score) {
if (score >= 90) {
return "A";
}
if (score >= 80) {
return "B";
}
return "C";
}
}
int main() {
int score = 85;
std::string grade = school::grades::letter(score);
std::cout << "score=" << score << std::endl;
std::cout << "grade=" << grade << std::endl;
return 0;
}
#include <iostream>
#include <string>
namespace school::grades {
std::string letter(int score) {
if (score >= 90) {
return "A";
}
if (score >= 80) {
return "B";
}
return "C";
}
}
int main() {
int score = 72;
std::string grade = school::grades::letter(score);
std::cout << "score=" << score << std::endl;
std::cout << "grade=" << grade << std::endl;
return 0;
}
#include <iostream>
#include <string>
namespace school::grades {
std::string letter(int score) {
if (score >= 90) {
return "A";
}
if (score >= 80) {
return "B";
}
return "C";
}
}
int main() {
int score = 93;
std::string grade = school::grades::letter(score);
std::cout << "score=" << score << std::endl;
std::cout << "grade=" << grade << std::endl;
return 0;
}
score ← 85
16int main() {17 int score→ 85 = 85; //@score=72, 931819 std::string grade = school::grades::letter(score85);std::string letter(int score)
4namespace school::grades {5std::string letter(int score85) {6 if (score >= 90) {if (score >= 80)
8}9if (score85 >= 80) {10 return "B";11}grade ← B
19 std::string grade→ B = school::grades::letter(score85);2021 std::cout << "score=" << score85 << std::endl;22 std::cout << "grade=" << gradeB << std::endl;23 return 0;24}outputscore=85 grade=B
score ← 72
16int main() {17 int score→ 72 = 72;1819 std::string grade = school::grades::letter(score72);std::string letter(int score)
4namespace school::grades {5std::string letter(int score72) {6 if (score >= 90) {7 return "A";8 }9 if (score >= 80) {10 return "B";11 }12 return "C";13}grade ← C
19 std::string grade→ C = school::grades::letter(score72);2021 std::cout << "score=" << score72 << std::endl;22 std::cout << "grade=" << gradeC << std::endl;23 return 0;24}outputscore=72 grade=C
score ← 93
16int main() {17 int score→ 93 = 93;1819 std::string grade = school::grades::letter(score93);std::string letter(int score)
4namespace school::grades {5std::string letter(int score93) {6 if (score >= 90) {if (score >= 90)
5std::string letter(int score) {6 if (score93 >= 90) {7 return "A";8 }grade ← A
19 std::string grade→ A = school::grades::letter(score93);2021 std::cout << "score=" << score93 << std::endl;22 std::cout << "grade=" << gradeA << std::endl;23 return 0;24}outputscore=93 grade=A