ISO/IEC 14882:2003
(Main)Programming languages - C++
Programming languages - C++
ISO/IEC 14882:2003 specifies requirements for implementations of the C++ programming language and standard library. By implication, it also defines C++ programs and their behavior. C++ is a general-purpose programming language based on the C programming language as described in ISO/IEC 9899:1990. In addition to the facilities provided by C, C++ provides additional data types, classes, templates, exceptions, namespaces, inline functions, operator overloading, function-name overloading, references, free-store management operators, and additional library facilities.
Langages de programmation — C++
General Information
Relations
Frequently Asked Questions
ISO/IEC 14882:2003 is a standard published by the International Organization for Standardization (ISO). Its full title is "Programming languages - C++". This standard covers: ISO/IEC 14882:2003 specifies requirements for implementations of the C++ programming language and standard library. By implication, it also defines C++ programs and their behavior. C++ is a general-purpose programming language based on the C programming language as described in ISO/IEC 9899:1990. In addition to the facilities provided by C, C++ provides additional data types, classes, templates, exceptions, namespaces, inline functions, operator overloading, function-name overloading, references, free-store management operators, and additional library facilities.
ISO/IEC 14882:2003 specifies requirements for implementations of the C++ programming language and standard library. By implication, it also defines C++ programs and their behavior. C++ is a general-purpose programming language based on the C programming language as described in ISO/IEC 9899:1990. In addition to the facilities provided by C, C++ provides additional data types, classes, templates, exceptions, namespaces, inline functions, operator overloading, function-name overloading, references, free-store management operators, and additional library facilities.
ISO/IEC 14882:2003 is classified under the following ICS (International Classification for Standards) categories: 35.060 - Languages used in information technology. The ICS classification helps identify the subject area and facilitates finding related standards.
ISO/IEC 14882:2003 has the following relationships with other standards: It is inter standard links to ISO 10642:2004/Amd 1:2012, ISO/IEC 14882:2011, ISO/IEC 14882:1998. Understanding these relationships helps ensure you are using the most current and applicable version of the standard.
You can purchase ISO/IEC 14882:2003 directly from iTeh Standards. The document is available in PDF format and is delivered instantly after payment. Add the standard to your cart and complete the secure checkout process. iTeh Standards is an authorized distributor of ISO standards.
Standards Content (Sample)
INTERNATIONAL ISO/IEC
STANDARD 14882
Second edition
2003-10-15
Programming languages — C++
Langages de programmation — C++
Reference number
©
ISO/IEC 2003
PDF disclaimer
This PDF file may contain embedded typefaces. In accordance with Adobe's licensing policy, this file may be printed or viewed but
shall not be edited unless the typefaces which are embedded are licensed to and installed on the computer performing the editing. In
downloading this file, parties accept therein the responsibility of not infringing Adobe's licensing policy. The ISO Central Secretariat
accepts no liability in this area.
Adobe is a trademark of Adobe Systems Incorporated.
Details of the software products used to create this PDF file can be found in the General Info relative to the file; the PDF-creation
parameters were optimized for printing. Every care has been taken to ensure that the file is suitable for use by ISO member bodies. In
the unlikely event that a problem relating to it is found, please inform the Central Secretariat at the address given below.
This CD-ROM contains the publication ISO/IEC 14882 in portable document format (PDF), which can be
viewed using Adobe® Acrobat® Reader.
Adobe and Acrobat are trademarks of Adobe Systems Incorporated.
This second edition cancels and replaces the first edition (ISO/IEC 14882:1998), which has been technically
revised.
© ISO/IEC 2003
All rights reserved. Unless otherwise specif
...
INTERNATIONAL ISO/IEC
STANDARD 14882
Second edition
2003-10-15
Programming languages — C++
Langages de programmation — C++
Reference number
©
ISO/IEC 2003
PDF disclaimer
This PDF file may contain embedded typefaces. In accordance with Adobe's licensing policy, this file may be printed or viewed but
shall not be edited unless the typefaces which are embedded are licensed to and installed on the computer performing the editing. In
downloading this file, parties accept therein the responsibility of not infringing Adobe's licensing policy. The ISO Central Secretariat
accepts no liability in this area.
Adobe is a trademark of Adobe Systems Incorporated.
Details of the software products used to create this PDF file can be found in the General Info relative to the file; the PDF-creation
parameters were optimized for printing. Every care has been taken to ensure that the file is suitable for use by ISO member bodies. In
the unlikely event that a problem relating to it is found, please inform the Central Secretariat at the address given below.
© ISO/IEC 2003
All rights reserved. Unless otherwise specified, no part of this publication may be reproduced or utilized in any form or by any means,
electronic or mechanical, including photocopying and microfilm, without permission in writing from either ISO at the address below or
ISO's member body in the country of the requester.
ISO copyright office
Case postale 56 • CH-1211 Geneva 20
Tel. + 41 22 749 01 11
Fax + 41 22 749 09 47
E-mail copyright@iso.org
Web www.iso.org
Published in Switzerland
ii © ISO/IEC 2003 — All rights reserved
Contents
1 General .1
1.1 Scope.1
1.2 Normative references .1
1.3 Terms and definitions .1
1.3.1 argument .1
1.3.2 diagnostic message .2
1.3.3 dynamic type .2
1.3.4 ill-formed program.2
1.3.5 implementation-defined behavior .2
1.3.6 implementation limits .2
1.3.7 locale-specific behavior .2
1.3.8 multibyte character .2
1.3.9 parameter .2
1.3.10 signature .2
1.3.11 static type .2
1.3.12 undefined behavior .2
1.3.13 unspecified behavior .3
1.3.14 well-formed program .3
1.4 Implementation compliance.3
1.5 Structure of this International Standard .4
1.6 Syntax notation .4
1.7 The C + + memory model .4
1.8 The C + + object model .4
1.9 Program execution .5
© ISO/IEC 2003 — All rights reserved iii
1.10 Acknowledgments .8
2 Lexical conventions .9
2.1 Phases of translation .9
2.2 Character sets .10
2.3 Trigraph sequences .11
2.4 Preprocessing tokens .11
2.5 Alternative tokens .12
2.6 Tokens.12
2.7 Comments .12
2.8 Header names .13
2.9 Preprocessing numbers .13
2.10 Identifiers .13
2.11 Keywords .14
2.12 Operators and punctuators .15
2.13 Literals .15
2.13.1 Integer literals .15
2.13.2 Character literals .16
2.13.3 Floating literals .18
2.13.4 String literals .19
2.13.5 Boolean literals .19
3 Basic concepts .21
3.1 Declarations and definitions .21
3.2 One definition rule .22
3.3 Declarative regions and scopes .24
3.3.1 Point of declaration .25
3.3.2 Local scope .26
3.3.3 Function prototype scope .26
3.3.4 Function scope .27
3.3.5 Namespace scope .27
3.3.6 Class scope.27
3.3.7 Name hiding.28
3.4 Name lookup .29
3.4.1 Unqualified name lookup .29
3.4.2 Argument-dependent name lookup .32
3.4.3 Qualified name lookup .34
iv © ISO/IEC 2003 — All rights reserved
3.4.3.1 Class members .35
3.4.3.2 Namespace members .35
3.4.4 Elaborated type specifiers .39
3.4.5 Class member access .40
3.4.6 Using-directives and namespace aliases .41
3.5 Program and linkage .41
3.6 Start and termination.43
3.6.1 Main function.43
3.6.2 Initialization of non-local objects .44
3.6.3 Termination.45
3.7 Storage duration .46
3.7.1 Static storage duration .46
3.7.2 Automatic storage duration.46
3.7.3 Dynamic storage duration .47
3.7.3.1 Allocation functions.47
3.7.3.2 Deallocation functions .48
3.7.4 Duration of sub-objects.48
3.8 Object Lifetime .49
3.9 Types.52
3.9.1 Fundamental types .53
3.9.2 Compound types .55
3.9.3 CV-qualifiers .55
3.10 Lvalues and rvalues .56
4 Standard conversions .59
4.1 Lvalue-to-rvalue conversion .59
4.2 Array-to-pointer conversion .60
4.3 Function-to-pointer conversion .60
4.4 Qualification conversions .60
4.5 Integral promotions .61
4.6 Floating point promotion .61
4.7 Integral conversions .62
4.8 Floating point conversions .62
4.9 Floating-integral conversions .62
4.10 Pointer conversions .62
4.11 Pointer to member conversions .63
© ISO/IEC 2003 — All rights reserved v
4.12 Boolean conversions .63
5 Expressions .65
5.1 Primary expressions .66
5.2 Postfix expressions .68
5.2.1 Subscripting .68
5.2.2 Function call .68
5.2.3 Explicit type conversion (functional notation) .70
5.2.4 Pseudo destructor call .70
5.2.5 Class member access .70
5.2.6 Increment and decrement .71
5.2.7 Dynamic cast .72
5.2.8 Type identification .73
5.2.9 Static cast .74
5.2.10 Reinterpret cast .75
5.2.11 Const cast .76
5.3 Unary expressions .78
5.3.1 Unary operators.78
5.3.2 Increment and decrement .79
5.3.3 Sizeof .79
5.3.4 New .80
5.3.5 Delete .83
5.4 Explicit type conversion (cast notation) .84
5.5 Pointer-to-member operators .85
5.6 Multiplicative operators .85
5.7 Additive operators .86
5.8 Shift operators .87
5.9 Relational operators .87
5.10 Equality operators .88
5.11 Bitwise AND operator .89
5.12 Bitwise exclusive OR operator .89
5.13 Bitwise inclusive OR operator .89
5.14 Logical AND operator .89
5.15 Logical OR operator .90
5.16 Conditional operator .90
5.17 Assignment operators .91
vi © ISO/IEC 2003 — All rights reserved
5.18 Comma operator .92
5.19 Constant expressions .92
6 Statements .95
6.1 Labeled statement .95
6.2 Expression statement .95
6.3 Compound statement or block .95
6.4 Selection statements.96
6.4.1 Theif statement .97
6.4.2 Theswitch statement .97
6.5 Iteration statements .97
6.5.1 Thewhile statement .98
6.5.2 Thedo statement .98
6.5.3 Thefor statement.99
6.6 Jump statements .99
6.6.1 Thebreak statement .99
6.6.2 Thecontinue statement.100
6.6.3 Thereturn statement .100
6.6.4 Thegoto statement .100
6.7 Declaration statement .100
6.8 Ambiguity resolution .101
7 Declarations .103
7.1 Specifiers .104
7.1.1 Storage class specifiers .105
7.1.2 Function specifiers .106
7.1.3 Thetypedef specifier.107
7.1.4 Thefriend specifier .108
7.1.5 Type specifiers .108
7.1.5.1 The cv-qualifiers.109
7.1.5.2 Simple type specifiers .110
7.1.5.3 Elaborated type specifiers .111
7.2 Enumeration declarations .112
7.3 Namespaces .114
7.3.1 Namespace definition .114
7.3.1.1 Unnamed namespaces .115
7.3.1.2 Namespace member definitions .115
7.3.2 Namespace alias .117
7.3.3 Theusing declaration .117
7.3.4 Using directive .123
7.4 Theasm declaration .126
© ISO/IEC 2003 — All rights reserved vii
7.5 Linkage specifications .126
8 Declarators .131
8.1 Type names .132
8.2 Ambiguity resolution .132
8.3 Meaning of declarators .134
8.3.1 Pointers .135
8.3.2 References .135
8.3.3 Pointers to members .136
8.3.4 Arrays .137
8.3.5 Functions.138
8.3.6 Default arguments .141
8.4 Function definitions .144
8.5 Initializers .145
8.5.1 Aggregates .147
8.5.2 Character arrays .150
8.5.3 References .150
9 Classes .153
9.1 Class names .153
9.2 Class members .155
9.3 Member functions .157
9.3.1 Nonstatic member functions .158
9.3.2 Thethis pointer .160
9.4 Static members.160
9.4.1 Static member functions .161
9.4.2 Static data members .161
9.5 Unions .162
9.6 Bit-fields .163
9.7 Nested class declarations .164
9.8 Local class declarations .165
9.9 Nested type names .166
10 Derived classes .167
10.1 Multiple base classes .168
10.2 Member name lookup .169
10.3 Virtual functions .172
viii © ISO/IEC 2003 — All rights reserved
10.4 Abstract classes .176
11 Member access control .179
11.1 Access specifiers .180
11.2 Accessibility of base classes and base class members .181
11.3 Access declarations .182
11.4 Friends .183
11.5 Protected member access .186
11.6 Access to virtual functions.187
11.7 Multiple access .188
11.8 Nested classes .188
12 Special member functions.189
12.1 Constructors .189
12.2 Temporary objects .191
12.3 Conversions .192
12.3.1 Conversion by constructor .193
12.3.2 Conversion functions .194
12.4 Destructors .195
12.5 Free store .198
12.6 Initialization .199
12.6.1 Explicit initialization .200
12.6.2 Initializing bases and members .201
12.7 Construction and destruction .204
12.8 Copying class objects .207
13 Overloading .213
13.1 Overloadable declarations.213
13.2 Declaration matching .215
13.3 Overload resolution .216
13.3.1 Candidate functions and argument lists .217
13.3.1.1 Function call syntax .218
13.3.1.1.1 Call to named function.218
13.3.1.1.2 Call to object of class type .219
13.3.1.2 Operators in expressions .220
© ISO/IEC 2003 — All rights reserved ix
13.3.1.3 Initialization by constructor .222
13.3.1.4 Copy-initialization of class by user-defined conversion.222
13.3.1.5 Initialization by conversion function .222
13.3.1.6 Initialization by conversion function for direct reference binding .223
13.3.2 Viable functions .223
13.3.3 Best Viable Function .223
13.3.3.1 Implicit conversion sequences .225
13.3.3.1.1 Standard conversion sequences .227
13.3.3.1.2 User-defined conversion sequences .227
13.3.3.1.3 Ellipsis conversion sequences.228
13.3.3.1.4 Reference binding .228
13.3.3.2 Ranking implicit conversion sequences.228
13.4 Address of overloaded function .230
13.5 Overloaded operators .232
13.5.1 Unary operators.233
13.5.2 Binary operators.233
13.5.3 Assignment .233
13.5.4 Function call .234
13.5.5 Subscripting .234
13.5.6 Class member access .234
13.5.7 Increment and decrement .234
13.6 Built-in operators .235
14 Templates .239
14.1 Template parameters .240
14.2 Names of template specializations .242
14.3 Template arguments.244
14.3.1 Template type arguments .245
14.3.2 Template non-type arguments .246
14.3.3 Template template arguments .248
14.4 Type equivalence .248
14.5 Template declarations .249
14.5.1 Class templates .249
14.5.1.1 Member functions of class templates.249
14.5.1.2 Member classes of class templates .250
14.5.1.3 Static data members of class templates.250
14.5.2 Member templates .251
14.5.3 Friends .252
14.5.4 Class template partial specializations .254
14.5.4.1 Matching of class template partial specializations .256
14.5.4.2 Partial ordering of class template specializations .257
14.5.4.3 Members of class template specializations .257
14.5.5 Function templates .258
14.5.5.1 Function template overloading .259
14.5.5.2 Partial ordering of function templates .260
x © IS
...










Questions, Comments and Discussion
Ask us and Technical Secretary will try to provide an answer. You can facilitate discussion about the standard in here.
Loading comments...