Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/language/Zero-overhead principle"

From cppreference.com
< cpp‎ | language
(Undo revision 158902 by Andreas Krug (talk))
(Undo revision 158905 by SmartDev (talk))
Line 13: Line 13:
 
===External links===
 
===External links===
 
{{elink begin}}
 
{{elink begin}}
{{elink|num=1|[http://www.stroustrup.com/ETAPS-corrected-draft.pdf Foundations of C++] - Bjarne Stroustrup}}
+
{{elink|num=1|[https://www.stroustrup.com/ETAPS-corrected-draft.pdf Foundations of C++] - Bjarne Stroustrup}}
 
{{elink|num=2|{{stddoc|p1947|C++ exceptions and alternatives}} - Bjarne Stroustrup}}
 
{{elink|num=2|{{stddoc|p1947|C++ exceptions and alternatives}} - Bjarne Stroustrup}}
 
{{elink|num=3|[https://youtu.be/ARYP83yNAWk De-fragmenting C++] - Making {{rlp|exceptions|Exceptions}} and {{rlp|types|RTTI}} More Affordable and Usable - Herb Sutter}}
 
{{elink|num=3|[https://youtu.be/ARYP83yNAWk De-fragmenting C++] - Making {{rlp|exceptions|Exceptions}} and {{rlp|types|RTTI}} More Affordable and Usable - Herb Sutter}}

Revision as of 15:30, 12 September 2023

 
 
C++ language
General topics
Flow control
Conditional execution statements
if
Iteration statements (loops)
for
range-for (C++11)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications (until C++17*)
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
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
explicit (C++11)
static

Special member functions
Templates
Miscellaneous
 

The zero-overhead principle is a C++ design principle that states:

  1. You don't pay for what you don't use.
  2. What you do use is just as efficient as what you could reasonably write by hand.

In general, this means that no feature should be added to C++ that would impose any overhead, whether in time or space, greater than a programmer would introduce without using the feature.

The only two features in the language that do not follow the zero-overhead principle are runtime type identification and exceptions, and are why most compilers include a switch to turn them off.

External links

1.  Foundations of C++ - Bjarne Stroustrup
2.  C++ exceptions and alternatives - Bjarne Stroustrup
3.  De-fragmenting C++ - Making Exceptions and RTTI More Affordable and Usable - Herb Sutter
4.  Bjarne Stroustrup: C++ on Artificial Intelligence (AI) Podcast