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 | ||||||||||||||||
Принцип нулевых накладных расходов — это принцип проектирования в C++, который гласит:
- Вы не платите за то, что не используете.
- То, что вы используете, работает так же эффективно, как если бы вы написали это вручную.
В общем случае это означает, что в C++ не следует добавлять никакие возможности, которые бы накладывали дополнительные затраты, будь то временные или пространственные, превышающие те, которые программист мог бы внести без использования этих возможностей.
Единственные две особенности языка, которые не следуют принципу нулевых накладных расходов, это runtime type identification и exceptions , и именно поэтому большинство компиляторов включают опцию для их отключения.
Внешние ссылки
| 1. | Основы C++ - Бьярне Страуструп |
| 2. | Исключения C++ и альтернативы - Бьярне Страуструп |
| 3. | Дефрагментация C++ - Сделать Исключения и RTTI Более Доступными и Удобными - Херб Саттер |
| 4. | Бьярне Страуструп: C++ в подкасте об Искусственном Интеллекте (AI) |