Abraxas Package Index  Table of Contents

Abraxas Sofware, Inc. Home

http://www.abxsoft.com

Rule-File for Meyers C++ Coding Standard

 

// CodeCheck (c) 2006 Rule-File for C++ Coding Standard Automation Script - Abraxas Software [ MEC.CC ]

/*
Effective C++: 55 Specific Ways to Improve Your Programs and Designs, 3rd Edition
Published: May 12, 2005; Copyright 2005; By Scott Meyers.
Published by Addison Wesley Professional. Series: Addison-Wesley Professional Computing Series.

Use of this rule-file is conditional upon you purchasing the book. www.amazon.com ISBN: 0321334876;
*/

//Chapter 1: Accustoming Yourself to C++ 11

/*
Item 1: View C++ as a federation of languages. 11
*/

/*
-K0 Strict 1978 K&R C -K1 Strict ANSI C -K2 K&R C with ext
-K3 ANSI C with ext -K4 Standard C++ -K5 Symantec C++
-K6 Borland C++ -K7 Microsoft C++ -K8 IBM Visual Age C++
-K9 Metrowerks CW C++ -K10 VAX-HP/Apollo C -K11 Metaware High C
-K12 IBM-MVS C/C++ -K13 GNU-GCC/G++ -K14 .NET Managed C++
*/

// We assume you'll be in -K4 mode, e.g. ANSI-STD 2004 C++

//Item 2: Prefer consts, enums, and inlines to #defines. 13

#include "m2.cc"

/*
Item 3: Use const whenever possible. 17
*/

#include "m3.cc"

/*
Item 4: Make sure that objects are initialized before they’re used. 26
*/

#include "m4.cc"

//Chapter 2: Constructors, Destructors, and Assignment Operators 34

/*
Item 5: Know what functions C++ silently writes and calls. 34
*/

#include "m5.cc"


// Item 6: Explicitly disallow the use of compiler-generated functions you do not want. 37

#include "m6.cc"

// Item 7: Declare destructors virtual in polymorphic base classes. 40

#include "m7.cc"

// Item 8: Prevent exceptions from leaving destructors. 44

// Item 9: Never call virtual functions during construction or destruction. 48

// Item 10: Have assignment operators return a reference to *this. 52

// Item 11: Handle assignment to self in operator=. 53

// Item 12: Copy all parts of an object. 57


//Chapter 3: Resource Management 61

/*
Item 13: Use objects to manage resources. 61

Item 14: Think carefully about copying behavior in resource-managing classes. 66

Item 15: Provide access to raw resources in resource-managing classes. 69

Item 16: Use the same form in corresponding uses of new and delete. 73

Item 17: Store newed objects in smart pointers in standalone statements. 75
*/

//Chapter 4: Designs and Declarations 78

/*
Item 18: Make interfaces easy to use correctly and hard to use incorrectly. 78

Item 19: Treat class design as type design. 84

Item 20: Prefer pass-by-reference-to-const to pass-by-value. 86

Item 21: Don’t try to return a reference when you must return an object. 90

Item 22: Declare data members private. 94

Item 23: Prefer non-member non-friend functions to member functions. 98

Item 24: Declare non-member functions when type conversions should apply to all parameters. 102

Item 25: Consider support for a non-throwing swap. 106
*/

//Chapter 5: Implementations 113

/*
Item 26: Postpone variable definitions as long as possible. 113

Item 27: Minimize casting. 116

Item 28: Avoid returning “handles” to object internals. 123

Item 29: Strive for exception-safe code. 127

Item 30: Understand the ins and outs of inlining. 134

Item 31: Minimize compilation dependencies between files. 140
*/

//Chapter 6: Inheritance and Object-Oriented Design 149

/*
Item 32: Make sure public inheritance models “is-a.” 150

Item 33: Avoid hiding inherited names. 156

Item 34: Differentiate between inheritance of interface and inheritance of implementation. 161

Item 35: Consider alternatives to virtual functions. 169

Item 36: Never redefine an inherited non-virtual function. 178

Item 37: Never redefine a function’s inherited default parameter value. 180

Item 38: Model “has-a” or “is-implemented-in-terms-of” through composition. 184

Item 39: Use private inheritance judiciously. 187

Item 40: Use multiple inheritance judiciously. 192
*/

//Chapter 7: Templates and Generic Programming 199

/*
Item 41: Understand implicit interfaces and compile-time polymorphism. 199

Item 42: Understand the two meanings of typename. 203

Item 43: Know how to access names in templatized base classes. 207

Item 44: Factor parameter-independent code out of templates. 212

Item 45: Use member function templates to accept “all compatible types.” 218

Item 46: Define non-member functions inside templates when type conversions are desired. 222

Item 47: Use traits classes for information about types. 226

Item 48: Be aware of template metaprogramming. 233
*/

//Chapter 8: Customizing new and delete 239

/*
Item 49: Understand the behavior of the new-handler. 240

Item 50: Understand when it makes sense to replace new and delete. 247

Item 51: Adhere to convention when writing new and delete. 252

Item 52: Write placement delete if you write placement new. 256
*/

//Chapter 9: Miscellany 262

/*
Item 53: Pay attention to compiler warnings. 262

Item 54: Familiarize yourself with the standard library, including TR1. 263

Item 55: Familiarize yourself with Boost. 269
*/

// CodeCheck (c) 2005 Rule-File for C++ Coding Standard - Abraxas Software [ MEC.CC ]
 

// CodeCheck (c) 2006 Rule-File for Meyers C++ Coding Standard Abraxas Software 
Abraxas Package Index  Meyers C++ Table of Contents

 

Abraxas Sofware, Inc. Home