C++箴言:最小化文件之间的编译依赖.pdfVIP

C++箴言:最小化文件之间的编译依赖.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++箴言:最小化文件之间的编译依赖 public: Person(const std::string std::string name() const; std::string birthDate() const; std::string address() const; ... private: std::string theName; // implementation detail Date theBirthDate; // implementation detail Address theAddress; // implementation detail }; 在这里,假如不访问 Person 的实现使用到的类,也就是 string, Date 和 Address 的定义,类 Person 就无法编译。这样的定义一般通过 #include 指令供应,所以在定义 Person 类的文件中,你很可能会找到 类似这样的东西: #include #include “date.h “ #include “address.h “ 不幸的是,这样就建立了定义 Person 的文件和这些头文件之间的编 译依靠关系。假如这些头文件中的一些发生了变化,或者这些头文件所依 靠的文件发生了变化,包含 Person 类的文件和使用了 Person 的文件一 样必需重新编译,这样的层叠编译依靠关系为工程带来数不清的麻烦。 你或许想知道 C++ 为什么坚持要将一个类的实现细节放在类定义中。 例如,你为什么不能这样定义 Person,单独指定这个类的实现细节呢? namespace std { class string; // forward declaration (an incorrec } // one - see below) class Date; // forward declaration class Address; // forward declaration class Person { public: Person(const std::string std::string name() const; std::string birthDate() const; std::string address() const; ... }; 假如这样可行,只有在类的接口发生变化时,Person 的客户才必需 重新编译。 这个办法有两个问题。第一个, string 不是一个类,它是一个 typedef (for basic_string) 。造成的结果就是, string 的前向声明 (forward declaration)是不正确的。正确的前向声明要简单得多,由 于它包括另外的模板。然而,这还不是要紧的,由于你不应当试着手动声 明标准库的部件。作为替代,直接使用适当的 #includes 并让它去做。 标准头文件不太可能成为编译的瓶颈,特殊是在你的构建环境允许你利用 预编译头文件时。假如解析标准头文件真的成为一个问题。你或许需要转 变你的接口设计,避开使用导致不受欢送的 #includes 的标准库部件。 其次个 (而且更重要的)难点是前向声明的每一件东西必需让编译器 在编译期间知道它的对象的大小。考虑: int main() int x; // define an int Person p( params ); // define a Person ... }

您可能关注的文档

文档评论(0)

182****9516 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档