摘要: 7.3 名字空间1、名字空间是一个名字可选的声明区域(未命名的名字空间也是合法的)。借助名字空间的名字可访问在名字空间中声明的实体,也就是名字空间的成员。与其它的声明区域不同,名字空间的定义可以由分布在一个多个翻译单元中的多个分立部分组成。2、翻译单元的最外层声明区域是一个名字空间;参见3.3.5。7.3.1 名字空间定义1、名字空间定义的语法为:namespace-name:original-namespace-namenamespace-aliasoriginal-namespace-name:identifiernamespace-definition:named-namespace-d 阅读全文
posted @ 2006-04-19 14:53 Goncely 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 7.2 枚举声明1、枚举是一种由命名常量构成的独立类型(3.9.1)。在其作用域内,其名字被称为枚举名。enum-name:identifierenum-specifier:enum identifieropt { enumerator-listopt }enumerator-list:enumerator-definitionenumerator-list , enumerator-definitionenumerator-definition:enumeratorenumerator = constant-expression // 带初始化体的枚举符定义enumerator:identi 阅读全文
posted @ 2006-04-18 13:56 Goncely 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 5.2.4 伪析构函数调用1、在点号.或箭头->之后的pseudo-destructor-name代表了由type-name命名的非类类型的析构函数。pseudo-destructor-name只能用作函数调用操作符()的操作数,此类调用的结果为空类型,它的唯一作用在于计算点号或箭头前面的后缀表达式。例如: typedef int I; I x = 10; x.I::~I(); // or x.~I(); x = 20;上面的x.I::~I();语句其实是调用了int类型的析构函数,但这并不会销毁x对象,x对象还能正常使用,x.I::~I();在此处并无实质作用。另外,如果将x.I::~ 阅读全文
posted @ 2006-04-18 11:30 Goncely 阅读(466) 评论(0) 推荐(0) 编辑
摘要: 5.2.3 显式类型转换(函数式记法)1、后跟被圆括号括起来的表达式列表的简单类型说明符(7.1.5)构造了给定表达式列表的指定类型值。如果表达式列表为单个表达式,这个类型转换表达式等价于相应的转型(强制类型转换)表达式(5.4)。如果简单类型说明符指定一个类类型,这个类类型必须是完全的。如果表达式列表指定了多个值,类型必须为具有适当构造函数(8.5, 12.1)的类,并且表达式T(x1, x2, …)在效用上等价于声明T t (x1, x2, …);其中t为编译器引入的临时变量,表达式的结果等于t的右值。2、对于非数组完全对象类型或(可能cv限定的)空类型的简单类型说明符(7.1.5.2)T 阅读全文
posted @ 2006-04-18 11:29 Goncely 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 函数定义或声明时叫参数(parameter),函数调用时则称参量(argument)。如:int f(int a);main(){ int i = 0; f(i);}其中i称为参量,a称为参数。参量通常称为实参(actual argument),参数则称为形参(formal parameter)。 阅读全文
posted @ 2006-04-17 18:23 Goncely 阅读(605) 评论(0) 推荐(0) 编辑
摘要: 5.2.2 函数调用1、存在两类函数调用:普通函数调用和成员函数(9.3)[注:静态成员函数(9.4)为普通函数。]调用。函数调用是一个后跟圆括号的后缀表达式,其中圆括号内或者为空,或者是通过逗号分隔的表达式列表,这个表达式列表组成了函数的参量。对于普通函数调用来说,后缀表达式或者是一个引用函数的左值(在这种情况下,不对后缀表达式进行函数-指针标准转换(4.3)),或者是一个指向函数类型的指针。如果函数通过具有语言链接属性的函数类型的表达式调用,当此语言链接属性与被调用函数的函数类型的语言链接属性不同时,函数的调用行为是未定义的(7.5)。对于成员函数调用来说,后缀表达式应该为隐式或显式的类成 阅读全文
posted @ 2006-04-17 18:21 Goncely 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 5.2 后缀表达式1、后缀表达式从左至右组合。postfix-expression:primary-expressionpostfix-expression [ expression ] // 下标postfix-expression ( expression-listopt ) // 函数调用simple-type-specifier ( expression-listopt )typename ::opt nested-name-specifier identifier ( expression-listopt )typename ::opt nested-name-specifier t 阅读全文
posted @ 2006-04-17 18:20 Goncely 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 12.3 转换1、类对象的类型转换可由构造函数和转换函数指定。这些转换称为用户定义的转换,可用于隐式类型转换(第4章)、初始化(8.5)和显式类型转换(5.4,5.2.9)。2、只有不存在歧义(10.2,12.3.2)的时候才能使用用户定义的转换。转换遵从访问控制规则(第11章)。访问控制在歧义消解(3.4)之后应用。3、[注:有关转换在函数调用中的使用可参见13.3和下面的例子。]4、最多只能有一个用户定义的转换(构造函数或转换函数)能隐式地应用于单个值。例如:class X {// ...public:operator int();};class Y {// ...public:opera 阅读全文
posted @ 2006-04-14 19:16 Goncely 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 7.1.5.3 详细类型说明符elaborated-type-specifier:class-key ::opt nested-name-specifieropt identifierclass-key ::opt nested-name-specifieropt templateopt template-idenum ::opt nested-name-specifieropt identifiertypename ::opt nested-name-specifier identifiertypename ::opt nested-name-specifier templateopt te 阅读全文
posted @ 2006-04-13 10:06 Goncely 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 7.1.5.2 简单类型说明符1、简单类型声明符为simple-type-specifier:::opt nested-name-specifieropt type-name::opt nested-name-specifier template template-id(此处的template应该是可选的,因为定义std::list<int> l;和std::template list<int> l;都是合法的)charwchar_tboolshortintlongsignedunsignedfloatdoublevoidtype-name:class-nameenum 阅读全文
posted @ 2006-04-13 10:05 Goncely 阅读(280) 评论(0) 推荐(0) 编辑