gpt4 book ai didi

c++ - pg :172-176. PartA.Interface Design Alternatives, Stroustrup-CPL-3E

转载 作者:行者123 更新时间:2023-11-28 08:08:43 24 4
gpt4 key购买 nike

在第 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 中?这就是为什么他说:

"compiler doesn't have sufficient information to check the consistency of the two definitions of the namespace"

  • 因为 implementer.h 和 user.h 都不能包含在“解析器实现”(parse.cpp) 中?

172.png 173.png

在第 174 页,他有:

  namespace Parser {   //interface for implementers
// ...
double expr(bool);
// ...
}

namespace Parser_interface { //interface for users
using Parser::expr;
}

是上层命名空间进入 implementer.h,下层命名空间进入 user.h

在他的“依赖图”中,他重申了显而易见的事实:当 Make 运行时,对“Parser”(parser.cpp/implementer.h) 的任何更改会导致 driver/main.cpp 被重建 - 不必要地?

174.png

最佳答案

http://groups.google.com/group/alt.comp.lang.learn.c-c++/browse_thread/thread/3be9f35f2969f311/0d418ec6138a7e58#0d418ec6138a7e58

(关于编译器一致性的部分是错误的,上面的线程说明了原因:是的,实现可以而且应该这样做,但是检查一致性只在一定程度上起作用。如果 user.h 使用的是没有在那里宣布,你会得到一个诊断。如果你有“双expr(bool);"在一处声明,而在另一处声明 "float expr(bool);"编译器还应该给你一个诊断。但是,如果您更改第二个是“float expr(int);”,那么这只是一个重载,它是完全合法的 C++。 -乌尔里希·埃克哈特)

关于c++ - pg :172-176. PartA.Interface Design Alternatives, Stroustrup-CPL-3E,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9628546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com