Zero-overhead principle
From cppreference.net
C++
C++ language
| General topics | ||||||||||||||||
| Flow control | ||||||||||||||||
| Conditional execution statements | ||||||||||||||||
| Iteration statements (loops) | ||||||||||||||||
|
||||||||||||||||
| Jump statements | ||||||||||||||||
| Functions | ||||||||||||||||
| Function declaration | ||||||||||||||||
| Lambda function expression | ||||||||||||||||
inline
specifier
|
||||||||||||||||
| Dynamic exception specifications ( until C++17* ) | ||||||||||||||||
noexcept
specifier
(C++11)
|
||||||||||||||||
| Exceptions | ||||||||||||||||
| Namespaces | ||||||||||||||||
| Types | ||||||||||||||||
| Specifiers | ||||||||||||||||
|
||||||||||||||||
| Storage duration specifiers | ||||||||||||||||
| Initialization | ||||||||||||||||
| Expressions | ||||||||||||||||
| Alternative representations | ||||||||||||||||
| Literals | ||||||||||||||||
| Boolean - Integer - Floating-point | ||||||||||||||||
| Character - String - nullptr (C++11) | ||||||||||||||||
| User-defined (C++11) | ||||||||||||||||
| Utilities | ||||||||||||||||
| Attributes (C++11) | ||||||||||||||||
| Types | ||||||||||||||||
typedef
declaration
|
||||||||||||||||
| Type alias declaration (C++11) | ||||||||||||||||
| Casts | ||||||||||||||||
| Memory allocation | ||||||||||||||||
| Classes | ||||||||||||||||
| Class-specific function properties | ||||||||||||||||
|
||||||||||||||||
| Special member functions | ||||||||||||||||
|
||||||||||||||||
| Templates | ||||||||||||||||
| Miscellaneous | ||||||||||||||||
Das zero-overhead principle ist ein C++-Designprinzip, das besagt:
- Sie zahlen nicht für das, was Sie nicht verwenden.
- Was Sie verwenden, ist genauso effizient wie das, was Sie vernünftigerweise von Hand schreiben könnten.
Im Allgemeinen bedeutet dies, dass C++ keine Funktion hinzugefügt werden sollte, die einen höheren Aufwand verursacht, sei es in Zeit oder Speicher, als ein Programmierer ohne Verwendung dieser Funktion einführen würde.
Die einzigen beiden Sprachmerkmale, die nicht dem Zero-Overhead-Prinzip folgen, sind Runtime Type Identification und Exceptions , weshalb die meisten Compiler eine Option enthalten, um sie abzuschalten.
Externe Links
| 1. | Grundlagen von C++ - Bjarne Stroustrup |
| 2. | C++-Ausnahmen und Alternativen - Bjarne Stroustrup |
| 3. | Defragmentierung von C++ - Ausnahmen und RTTI Erschwinglicher und Nutzbarer Machen - Herb Sutter |
| 4. | Bjarne Stroustrup: C++ im Artificial Intelligence (AI) Podcast |