在第 172 页,Stroustrup 正在做这样的事情:
namespace Parser { //interface for users
double expr(bool);
}
namespace Parser { //interface for implementers
double prim(bool);
double term(bool);
double expr(bool);
using Lexer::get_token;
<SNIP>
}
Q1。这是否意味着第一个命名空间被插入(例如)user.h 并包含在 main.cpp - 驱动程序中;第二个命名空间进入implementer.h 并包含在parse.cpp 中?这就是为什么他说:
“编译器没有足够的信息来检查命名空间的两个定义的一致性”
- 因为implementer.h和user.h都不能包含在“Parser implementation”(parse.cpp)中?
在第 174 页,他有:
namespace Parser { //interface for implementers
// ...
double expr(bool);
// ...
}
namespace Parser_interface { //interface for users
using Parser::expr;
}
上层命名空间是否进入implementer.h,下层命名空间进入user.h
在他的“ dependency graph
”中,他是否重申了显而易见的事实:当 Make 运行时,对“Parser”( parser.cpp/implementer.h
) 的任何更改都会导致 driver/main.cpp 被重建——这是不必要的吗?