diff --git a/CppCoreGuidelines.md b/CppCoreGuidelines.md index 8ea1b87..efb9e66 100644 --- a/CppCoreGuidelines.md +++ b/CppCoreGuidelines.md @@ -3513,8 +3513,8 @@ Class rule summary: * [C.4: Make a function a member only if it needs direct access to the representation of a class](#Rc-member) * [C.5: Place helper functions in the same namespace as the class they support](#Rc-helper) * [C.7: Don't define a class or enum and declare a variable of its type in the same statement](#Rc-standalone) -* [C.8: use `class` rather that `struct` if any member is non-public](#Rc-class) -* [C.9: minimize exposure of members](#Rc-private) +* [C.8: Use `class` rather than `struct` if any member is non-public](#Rc-class) +* [C.9: Minimize exposure of members](#Rc-private) Subsections: @@ -3708,7 +3708,7 @@ Mixing a type definition and the definition of another entity in the same declar * Flag if the `}` of a class or enumeration definition is not followed by a `;`. The `;` is missing. -### C.8: use `class` rather that `struct` if any member is non-public +### C.8: Use `class` rather than `struct` if any member is non-public ##### Reason @@ -3731,7 +3731,7 @@ There is nothing wrong with this code as far as the C++ language rules are conce but nearly everything is wrong from a design perspective. The private data is hidden far from the public data. The data is split in different parts of the class declaration. -Different parts of the data has difference access. +Different parts of the data have different access. All of this decreases readability and complicates maintenance. ##### Note @@ -3742,7 +3742,7 @@ Prefer to place the interface first in a class [see](#Rl-order). Flag classes declared with `struct` if there is a `private` or `public` member. -### C.9: minimize exposure of members +### C.9: Minimize exposure of members ##### Reason @@ -3771,7 +3771,7 @@ A value of regular type can be copied and the result of a copy is an independent If a concrete type has both `=` and `==`, `a = b` should result in `a == b` being `true`. Concrete classes without assignment and equality can be defined, but they are (and should be) rare. The C++ built-in types are regular, and so are standard-library classes, such as `string`, `vector`, and `map`. -Concrete types are also often referred to as value types to distinguish them from types uses as part of a hierarchy. +Concrete types are also often referred to as value types to distinguish them from types used as part of a hierarchy. Concrete type rule summary: @@ -3935,7 +3935,7 @@ Other default operations rules: ## C.defop: Default Operations -By default, the language supply the default operations with their default semantics. +By default, the language supplies the default operations with their default semantics. However, a programmer can disable or replace these defaults. ### C.20: If you can avoid defining default operations, do @@ -4542,7 +4542,7 @@ Compilers do not read comments. ##### Exception -If a valid object cannot conveniently be constructed by a constructor [use a factory function](#Rc-factory). +If a valid object cannot conveniently be constructed by a constructor, [use a factory function](#Rc-factory). ##### Note @@ -5512,7 +5512,7 @@ comparisons, `swap`, and `hash`. ##### Reason -The compiler is more likely to get the default semantics right and you cannot implement these function better than the compiler. +The compiler is more likely to get the default semantics right and you cannot implement these functions better than the compiler. ##### Example @@ -6104,7 +6104,7 @@ Readability. Detection of mistakes. Writing explicit `virtual`, `override`, or `final` is self-documenting and enables the compiler to catch mismatch of types and/or names between base and derived classes. However, writing more than one of these three is both redundant and a potential source of errors. -Use `virtual` only when declaring a new virtual function. Use `override` only when declaring an overrider. Use `final` only when declaring an final overrider. If a base class destructor is declared `virtual`, derived class destructors should neither be declared `virtual` nor `override`. +Use `virtual` only when declaring a new virtual function. Use `override` only when declaring an overrider. Use `final` only when declaring a final overrider. If a base class destructor is declared `virtual`, derived class destructors should neither be declared `virtual` nor `override`. ##### Example, bad @@ -6204,7 +6204,7 @@ The importance of keeping the two kinds of inheritance increases Problems: -* As the hierarchy grows and more data is adder to `Shape`, the constructors gets harder to write and maintain. +* As the hierarchy grows and more data is added to `Shape`, the constructors gets harder to write and maintain. * Why calculate the center for the `Triangle`? we may never us it. * Add a data member to `Shape` (e.g., drawing style or canvas) and all derived classes and all users needs to be reviewed, possibly changes, and probably recompiled. @@ -6621,7 +6621,7 @@ Too often, such claims are based on conjecture or experience with other language There are examples where `final` can be important for both logical and performance reasons. One example is a performance-critical AST hierarchy in a compiler or language analysis tool. New derived classes are not added every year and only by library implementers. -However, misuses are (or at least has been) far more common. +However, misuses are (or at least have been) far more common. ##### Enforcement @@ -6632,7 +6632,7 @@ Flag uses of `final`. ##### Reason -That can cause confusion: An overrider do not inherit default arguments. +That can cause confusion: An overrider does not inherit default arguments. ##### Example, bad