diff options
author | fanquake <fanquake@gmail.com> | 2019-10-14 17:54:46 -0400 |
---|---|---|
committer | fanquake <fanquake@gmail.com> | 2019-10-14 18:33:26 -0400 |
commit | dcc640811c8c1a0678a3c3726cb7df14f0a60250 (patch) | |
tree | 25aa37c65b7bc8406dd47df0304f2e6015eb4d54 /doc | |
parent | b33c03b0cb82e57eb862542c9d331b7ceb8f3a62 (diff) | |
parent | c8961c7d9fed07190628cf01f9dfad971a942b99 (diff) | |
download | bitcoin-dcc640811c8c1a0678a3c3726cb7df14f0a60250.tar.xz |
Merge #17134: doc: Add switch on enum example to developer notes
c8961c7d9fed07190628cf01f9dfad971a942b99 doc: Add switch on enum example (Hennadii Stepanov)
11e3d5eb1d4a4b399b180083ec52484d53ebf724 util: Add AllowShortCaseLabelsOnASingleLine option (Hennadii Stepanov)
Pull request description:
This PR documents a recurring issue:
- #15938
- #17105
ACKs for top commit:
laanwj:
Seems like good advice to me. ACK c8961c7d9fed07190628cf01f9dfad971a942b99
practicalswift:
ACK c8961c7d9fed07190628cf01f9dfad971a942b99
promag:
ACK c8961c7d9fed07190628cf01f9dfad971a942b99, no excuse now, thanks!
Tree-SHA512: 530da5117094ed1bfaa6e447089521bd2c86b0742758dbacec4e4f934dc07b0e24f15a1448c4d58e49905e8fd3797d87bcae5669a346d33ed4c2878a04891699
Diffstat (limited to 'doc')
-rw-r--r-- | doc/developer-notes.md | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/doc/developer-notes.md b/doc/developer-notes.md index f4a5e2d330..9cf4b4b075 100644 --- a/doc/developer-notes.md +++ b/doc/developer-notes.md @@ -87,7 +87,6 @@ code. - `++i` is preferred over `i++`. - `nullptr` is preferred over `NULL` or `(void*)0`. - `static_assert` is preferred over `assert` where possible. Generally; compile-time checking is preferred over run-time checking. - - `enum class` is preferred over `enum` where possible. Scoped enumerations avoid two potential pitfalls/problems with traditional C++ enumerations: implicit conversions to int, and name clashes due to enumerators being exported to the surrounding scope. Block style example: ```c++ @@ -563,6 +562,34 @@ class A - *Rationale*: Easier to understand what is happening, thus easier to spot mistakes, even for those that are not language lawyers. +- Prefer `enum class` (scoped enumerations) over `enum` (traditional enumerations) where possible. + + - *Rationale*: Scoped enumerations avoid two potential pitfalls/problems with traditional C++ enumerations: implicit conversions to `int`, and name clashes due to enumerators being exported to the surrounding scope. + +- `switch` statement on an enumeration example: + +```cpp +enum class Tabs { + INFO, + CONSOLE, + GRAPH, + PEERS +}; + +int GetInt(Tabs tab) +{ + switch (tab) { + case Tabs::INFO: return 0; + case Tabs::CONSOLE: return 1; + case Tabs::GRAPH: return 2; + case Tabs::PEERS: return 3; + } // no default case, so the compiler can warn about missing cases + assert(false); +} +``` + +*Rationale*: The comment documents skipping `default:` label, and it complies with `clang-format` rules. The assertion prevents firing of `-Wreturn-type` warning on some compilers. + Strings and formatting ------------------------ |