ISO/IEC 14882:1998
(Main)Programming languages - C++
Programming languages - C++
Langages de programmation — C++
General Information
Relations
Frequently Asked Questions
ISO/IEC 14882:1998 is a standard published by the International Organization for Standardization (ISO). Its full title is "Programming languages - C++". This standard covers: Programming languages - C++
Programming languages - C++
ISO/IEC 14882:1998 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:1998 has the following relationships with other standards: It is inter standard links to ISO/IEC 14882:2003. Understanding these relationships helps ensure you are using the most current and applicable version of the standard.
You can purchase ISO/IEC 14882:1998 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
First edition
1998-09-01
Programming languages — C++
Langages de programmation — C++
Reference number
B C
Contents
1 General . 1
1.1 Scope. 1
1.2 Normative references . 1
1.3 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 unspecificed 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.
1.9 Program execution. 5
© ISO/IEC 1998
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 the publisher.
ISO/IEC Copyright Office • Case postale 56 • CH-1211 Genève 20 • Switzerland
Printed in Switzerland
ii
© ISO/IEC ISO/IEC 14882:1998(E)
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 .33
iii
3.4.3.1 Class members .35
3.4.3.2 Namespace members .35
3.4.4 Elaborated type specifiers .38
3.4.5 Class member access .39
3.4.6 Using-directives and namespace aliases .40
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 .45
3.7.1 Static storage duration .46
3.7.2 Automatic storage duration.46
3.7.3 Dynamic storage duration .46
3.7.3.1 Allocation functions.47
3.7.3.2 Deallocation functions .47
3.7.4 Duration of sub-objects.48
3.8 Object Lifetime .48
3.9 Types.51
3.9.1 Fundamental types .53
3.9.2 Compound types .54
3.9.3 CV-qualifiers .55
3.10 Lvalues and rvalues .55
4 Standard conversions .57
4.1 Lvalue-to-rvalue conversion .57
4.2 Array-to-pointer conversion .58
4.3 Function-to-pointer conversion .58
4.4 Qualification conversions .58
4.5 Integral promotions .59
4.6 Floating point promotion .59
4.7 Integral conversions .60
4.8 Floating point conversions .60
4.9 Floating-integral conversions .60
4.10 Pointer conversions .60
4.11 Pointer to member conversions .61
iv
© ISO/IEC ISO/IEC 14882:1998(E)
4.12 Boolean conversions .61
5 Expressions .63
5.1 Primary expressions .64
5.2 Postfix expressions .66
5.2.1 Subscripting .66
5.2.2 Function call .66
5.2.3 Explicit type conversion (functional notation) .68
5.2.4 Pseudo destructor call .68
5.2.5 Class member access .68
5.2.6 Increment and decrement .69
5.2.7 Dynamic cast .70
5.2.8 Type identification .71
5.2.9 Static cast .72
5.2.10 Reinterpret cast .73
5.2.11 Const cast .74
5.3 Unary expressions .76
5.3.1 Unary operators.76
5.3.2 Increment and decrement .77
5.3.3 Sizeof .77
5.3.4 New .78
5.3.5 Delete .81
5.4 Explicit type conversion (cast notation) .82
5.5 Pointer-to-member operators .83
5.6 Multiplicative operators .83
5.7 Additive operators .84
5.8 Shift operators .85
5.9 Relational operators .85
5.10 Equality operators .86
5.11 BitwiseAND operator .87
5.12 Bitwise exclusiveOR operator .87
5.13 Bitwise inclusiveOR operator .87
5.14 LogicalAND operator .87
5.15 LogicalOR operator .88
5.16 Conditional operator .88
5.17 Assignment operators .89
v
5.18 Comma operator .90
5.19 Constant expressions .90
6 Statements .93
6.1 Labeled statement .93
6.2 Expression statement .93
6.3 Compound statement or block .93
6.4 Selection statements.94
6.4.1 Theif statement .95
6.4.2 Theswitch statement .95
6.5 Iteration statements .95
6.5.1 Thewhile statement .96
6.5.2 Thedo statement .96
6.5.3 Theforstatement.97
6.6 Jump statements .97
6.6.1 Thebreak statement .97
6.6.2 Thecontinuestatement.98
6.6.3 Thereturn statement .98
6.6.4 Thegoto statement .98
6.7 Declaration statement .98
6.8 Ambiguity resolution .99
7 Declarations .101
7.1 Specifiers .102
7.1.1 Storage class specifiers .103
7.1.2 Function specifiers .104
7.1.3 Thetypedefspecifier.105
7.1.4 Thefriend specifier .106
7.1.5 Type specifiers .106
7.1.5.1 Thecv-qualifiers.107
7.1.5.2 Simple type specifiers .108
7.1.5.3 Elaborated type specifiers .109
7.2 Enumeration declarations .110
7.3 Namespaces .112
7.3.1 Namespace definition .112
7.3.1.1 Unnamed namespaces .113
7.3.1.2 Namespace member definitions .113
7.3.2 Namespace alias .115
7.3.3 Theusing declaration .115
7.3.4 Using directive .120
7.4 Theasm declaration .123
vi
© ISO/IEC ISO/IEC 14882:1998(E)
7.5 Linkage specifications .123
8 Declarators .127
8.1 Type names .128
8.2 Ambiguity resolution .128
8.3 Meaning of declarators .130
8.3.1 Pointers .131
8.3.2 References .132
8.3.3 Pointers to members .133
8.3.4 Arrays .133
8.3.5 Functions.135
8.3.6 Default arguments .137
8.4 Function definitions .140
8.5 Initializers .141
8.5.1 Aggregates .144
8.5.2 Character arrays .146
8.5.3 References .147
9 Classes .149
9.1 Class names .149
9.2 Class members .151
9.3 Member functions .153
9.3.1 Nonstatic member functions .154
9.3.2 Thethis pointer .155
9.4 Static members.156
9.4.1 Static member functions .157
9.4.2 Static data members .157
9.5 Unions .158
9.6 Bit-fields .159
9.7 Nested class declarations .160
9.8 Local class declarations .161
9.9 Nested type names .161
10 Derived classes .163
10.1 Multiple base classes .164
10.2 Member name lookup .165
10.3 Virtual functions .168
vii
10.4 Abstract classes .172
11 Member access control .175
11.1 Access specifiers .176
11.2 Accessibility of base classes and base class members .177
11.3 Access declarations .178
11.4 Friends .179
11.5 Protected member access .182
11.6 Access to virtual functions.183
11.7 Multiple access .183
11.8 Nested classes .184
12 Special member functions.185
12.1 Constructors .185
12.2 Temporary objects .187
12.3 Conversions .188
12.3.1 Conversion by constructor .189
12.3.2 Conversion functions .190
12.4 Destructors .191
12.5 Free store .194
12.6 Initialization .195
12.6.1 Explicit initialization .196
12.6.2 Initializing bases and members .197
12.7 Construction and destruction .200
12.8 Copying class objects .203
13 Overloading .209
13.1 Overloadable declarations.209
13.2 Declaration matching .211
13.3 Overload resolution .212
13.3.1 Candidate functions and argument lists .213
13.3.1.1 Function call syntax .214
13.3.1.1.1 Call to named function.214
13.3.1.1.2 Call to object of class type .215
13.3.1.2 Operators in expressions .216
viii
© ISO/IEC ISO/IEC 14882:1998(E)
13.3.1.3 Initialization by constructor .218
13.3.1.4 Copy-initialization of class by user-defined conversion.218
13.3.1.5 Initialization by conversion function .218
13.3.1.6 Initialization by conversion function for direct reference binding .219
13.3.2 Viable functions .219
13.3.3 Best Viable Function .219
13.3.3.1 Implicit conversion sequences .221
13.3.3.1.1 Standard conversion sequences .222
13.3.3.1.2 User-defined conversion sequences .223
13.3.3.1.3 Ellipsis conversion sequences.223
13.3.3.1.4 Reference binding .224
13.3.3.2 Ranking implicit conversion sequences.224
13.4 Address of overloaded function .226
13.5 Overloaded operators .227
13.5.1 Unary operators.228
13.5.2 Binary operators.229
13.5.3 Assignment .229
13.5.4 Function call .229
13.5.5 Subscripting .230
13.5.6 Class member access .230
13.5.7 Increment and decrement .230
13.6 Built-in operators .231
14 Templates .235
14.1 Template parameters .236
14.2 Names of template specializations .238
14.3 Template arguments.239
14.3.1 Template type arguments .241
14.3.2 Template non-type arguments .242
14.3.3 Template template arguments .243
14.4 Type equivalence .244
14.5 Template declarations .244
14.5.1 Class templates .244
14.5.1.1 Member functions of class templates.245
14.5.1.2 Member classes of class templates .246
14.5.1.3 Static data members of class templates.246
14.5.2 Member templates .246
14.5.3 Friends .248
14.5.4 Class template partial specializations .250
14.5.4.1 Matching of class template partial specializations .252
14.5.4.2 Partial ordering of class template specializations .252
14.5.4.3 Members of class template specializations .253
14.5.5 Function templates .254
14.5.5.1 Function template overloading .254
14.5.5.2 Partial ordering of function templates .256
ix
14.6 Name resolution .257
14.6.1 Locally declared names .260
14.6.2 Dependent names .262
14.6.2.1 Dependent types.263
14.6.2.2 Type-dependent expressions .263
14.6.2.3 Value-dependent expressions .264
14.6.2.4 Dependent template arguments .264
14.6.3 Non-dependent names.265
14.6.4 Dependent name resolution .
...








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...