Imperfect C++ : Practical Solutions for Real-Life Programming

Matthew Wilson

  • 出版商: Addison Wesley
  • 出版日期: 2004-10-21
  • 售價: $1,920
  • 貴賓價: 9.5$1,824
  • 語言: 英文
  • 頁數: 624
  • 裝訂: Paperback
  • ISBN: 0321228774
  • ISBN-13: 9780321228772
  • 相關分類: C++ 程式語言
  • 立即出貨(限量) (庫存=10)

買這商品的人也買了...

商品描述

Description:

Imperfect C++

C++, although a marvelous language, isn't perfect. Matthew Wilson has been working with it for over a decade, and during that time he has found inherent limitations that require skillful workarounds. In this book, he doesn't just tell you what's wrong with C++, but offers practical techniques and tools for writing code that's more robust, flexible, efficient, and maintainable. He shows you how to tame C++'s complexity, cut through its vast array of paradigms, take back control over your code—and get far better results.

If you're a long-time C++ developer, this book will help you see your programming challenges in new ways—and illuminate powerful techniques you may never have tried. If you're newer to C++, you'll learn principles that will make you more effective in all of your projects. Along the way, you'll learn how to:

Overcome deficiencies in C++'s type system

Enforce software design through constraints, contracts, and assertions

Handle behavior ignored by the standard— including issues related to dynamic libraries, static objects, and threading

Achieve binary compatibility between dynamically loading components

Understand the costs and disadvantages of implicit conversions—and the alternatives

Increase compatibility with diverse compilers, libraries, and operating environments

Help your compiler detect more errors and work more effectively

Understand the aspects of style that impact reliability

Apply the Resource Acquisition Is Initialization mechanism to a wide variety of problem domains

Manage the sometimes arcane relationship between arrays and pointers

Use template programming to improve flexibility and robustness

Extend C++: including fast string concatenation, a true NULL-pointer, flexible memory buffers, Properties, multidimensional arrays, and Ranges

The CD-ROM contains a valuable variety of C++ compilers, libraries, test programs, tools, and utilities, as well as the author's related journal articles. New and updated imperfections, along with software libraries and example code are available online at http://imperfectcplusplus.com.

 

Table of Contents:

I. FUNDAMENTALS.

1. Enforcing Design: Constraints, Contracts, and Assertions.

    Eggs and Ham.

    Compile-Time Contracts: Constraints.

    Runtime Contracts: Preconditions, Postconditions, and Invariants.

    Assertions.

2. Object Lifetime.

    The Object Life Cycle.

    Controlling Your Clients.

    MILs and Boon.

3. Resource Encapsulation.

    A Taxonomy of Resource Encapsulation.

    POD Types.

    Wrapper Proxies.

    RRID Types.

    RAII Types.

    RAII Coda.

4. Data Encapsulation and Value Types.

    A Taxonomy of Data Encapsulation.

    Value Types and Entity Types.

    A Taxonomy of Value Types.

    Open Types.

    Encapsulated Types.

    Value Types.

    Arithmetic Value Types.

    Value Types Coda.

    Encapsulation Coda.

5. Object Access Models.

    Vouched Lifetimes.

    Copied for Caller.

    Given to Caller.

    Shared Objects.

6. Scoping Classes.

    Value.

    State.

    APIs and Services.

    Language Features.

II. SURVIVING THE REAL WORLD.

7. ABI.

    Sharing Code.

    C ABI Requirements.

    C++ ABI Requirements.

    I Can C Clearly Now.

8. Objects Across Borders.

    Mostly Portable vtables?

    Portable vtables.

    ABI/OAB Coda.

9. Dynamic Libraries.

    Calling Functions Explicitly.

    Indentity: Link Units and Link Space.

    Lifetime.

    Versioning.

    Resource Ownership.

    Dynamic Libraries: Coda.

10. Threading.

     Synchronizing Integer Access.

    Synchronizing Block Access: Critical Regions.

    Atomic Integer Performance.

    Multithreading Extensions.

    Thread Specific Storage.

11. Statics.

    Nonlocal Static Objects: Globals.

    Singletons.

    Function-Local Static Objects.

    Static Members.

    Statics Coda.

12. Optimization.

    Inline Functions.

    Return Value Optimization.

    Empty Base Optimization.

    Empty Derived Optimization.

    Preventing Optimization.

III. LANGUAGE CONCERNS.

13. Fundamental Types.

    May I Have a byte?

    Fixed-Sized Integer Types.

    Large Integer Types.

    Dangerous Types.

14. Arrays and Pointers.

    Don't Repeat Yourself.

    Arrays Decay into Pointers.

    dimensionof().

    Cannot Pass Arrays to Functions.

    Arrays Are Always Passed by Address.

    Arrays of Inherited Types.

    Cannot Have Multidimensional Arrays.

15. Values.

    NULL-The Keyword That Wasn't.

    Down to Zero.

    Bending the Truth.

    Literals.

    Constants.

16. Keywords.

    interface.

    temporary.

    owner.

    explicit(_cast).

    unique.

    final.

    Unsupported Keywords.

17. Syntax.

    Class Layout.

    Conditional Expressions.

    for.

    Variable Notation.

18. Typedefs.

    Pointer typedefs.

    What's in a Definition?

     Aliases.

    True Typedefs.

    The Good, the Bad, and the Ugly.

IV. COGNIZANT CONVERSIONS.

19. Casts.

    Implicit Conversion.

    Casting in C++.

    The Case for C Casts.

    Casts on Steroids.

    explicit_cast.

    literal_cast.

    union_cast.

    comstl::interface_cast.

    boost::polymorphic_cast.

    Casts: Coda.

20. Shims.

    Embracing Change and Enhancing Flexibility.

    Attribute Shims.

    Logical Shims.

    Control Shims.

    Conversion Shims.

    Composite Shim Concepts.

    Namespaces and Koenig Lookup.

    Why Not Traits?

    Structural Conformance.

    Breaking Up the Monolith.

    Shims: Coda.

21. Veneers.

    Lightweight RAII.

    Binding Data and Operations.

    Rubbing Up to Concepts.

    Veneers: Coda.

22. Bolt-ins.

    Adding Functionality.

    Skin Selection.

    Nonvirtual Overriding.

    Leveraging Scope.

    Simulated Compile-Time Polymorphism: Reverse Bolt-ins.

    Parameterized Polymorphic Packaging.

    Bolt-ins: Coda.

23. Template Constructors.

    Hidden Costs.

    Dangling References.

    Template Constructor Specialization.

    Argument Proxies.

    Argument Targeting.

    Template Constructors: Coda.

V. OPERATORS.

24. operator bool().

    operator int() const.

    operator void () const.

    operator bool() const.

    operator !()-not!.

    operator boolean const () const.

    operator int boolean::() const.

    Operating in the Real World.

    operator!.

25. Fast, Non-intrusive String Concatenation.

    fast_string_concatenator<>.

    Performance.

    Working with Other String Classes.

    Concatenation Seeding.

    Pathological Bracing.

    Standardization.

26. What's Your Address?

    Can't Get the Real Address.

    What Actions Are Carried Out during Conversion?

    What Do We Return?

    What's Your Address: Coda.

27. Subscript Operators.

    Pointer Conversion versus Subscript Operators.

    Handling Errors.

    Return Value.

28. Increment Operators.

    Missing Postfix Operators.

    Efficiency.

29. Arithmetic Types.

    Class Definition.

    Default Construction.

    Initialization (Value Construction).

    Copy Construction.

    Assignment.

    Arithmetic Operators.

    Comparison Operators.

    Accessing the Value.

    sinteger64.

    Truncations, Promotions, and Tests.

    Arithmetic Types: Coda.

30. Short-circuit!

VI. EXTENDING C++.

31. Return Value Lifetime.

    A Taxonomy of Return Value Lifetime Gotchas.

    Why Return-by-Reference?

    Solution 1-integer_to_string<>.

    Solution 2-TSS.

    Solution 3-Extending RVL.

    Solution 4-Static Array Size Determination.

    Solution 5-Conversion Shims.

    Performance.

    RVL: The Big Win for Garbage Collection.

    Potential Applications.

    Return Value Lifetime: Coda.

32. Memory.

    A Taxonomy of Memory.

    The Best of Both Worlds.

    Allocators.

    Memory: Coda.

33. Multidimensional Arrays.

    Facilitating Subscript Syntax.

    Sized at Run Time.

    Sized at Compile Time.

    Block Access.

    Performance.

    Multidimensional Arrays: Coda.

34. Functors and Ranges.

    Syntactic Clutter.

    for_all() ?

    Local Functors.

    Ranges.

    Functors and Ranges: Coda.

35. Properties.

    Compiler Extensions.

    Implementation Options.

    Field Properties.

    Method Properties.

    Static Properties.

    Virtual Properties.

    Property Uses.

    Properties: Coda.

Appendix A. Compilers and Libraries.

    Compilers.

    Libraries.

    Other Resources.

Appendix B. "Watch That Hubris!"

    Operator Overload.

    DRY Rued Yesterday.

    Paranoid Programming.

    To Insanity, and Beyond!

Appendix C. Arturius.

Appendix D. The CD.

Epilogue.

Bibliography.

Index. 

商品描述(中文翻譯)

描述:
《Imperfect C++》是一本關於C++編程的書籍。儘管C++是一種很棒的語言,但它並不完美。作者Matthew Wilson在使用C++超過十年的時間裡,發現了一些固有的限制,需要巧妙的解決方法。在這本書中,他不僅告訴你C++的問題所在,還提供了實用的技巧和工具,用於編寫更健壯、靈活、高效和易於維護的代碼。他向你展示如何控制C++的複雜性,突破其廣泛的範式,重新掌控代碼,並獲得更好的結果。

如果你是一個長期使用C++的開發者,這本書將幫助你以新的方式看待編程挑戰,並揭示你可能從未嘗試過的強大技巧。如果你對C++較新,你將學習到能夠使你在所有項目中更有效的原則。在此過程中,你將學習如何:
- 克服C++類型系統的不足
- 通過約束、契約和斷言來實施軟件設計
- 處理標準忽略的行為,包括與動態庫、靜態對象和線程相關的問題
- 實現動態加載組件之間的二進制兼容性
- 了解隱式轉換的成本和缺點,以及替代方案
- 提高與不同編譯器、庫和操作環境的兼容性
- 幫助編譯器檢測更多錯誤並更有效地工作
- 了解影響可靠性的風格方面
- 將資源獲取初始化機制應用於各種問題領域
- 管理數組和指針之間有時晦澀的關係
- 使用模板編程提高靈活性和健壯性
- 擴展C++,包括快速字符串連接、真正的NULL指針、靈活的內存緩衝區、屬性、多維數組和範圍

附帶的CD-ROM包含了各種有價值的C++編譯器、庫、測試程序、工具和實用程序,以及作者的相關期刊文章。新的和更新的缺陷,以及軟件庫和示例代碼可以在網上獲得。

目錄:
I. 基礎知識
1. 強制設計:約束、契約和斷言
- 雞蛋和火腿
- 編譯時契約:約束