8.3 声明符的含义
来源:互联网 发布:汇知中学在哪 编辑:程序博客网 时间:2024/05/20 21:45
8.3 声明符的含义
1、声明符列表出现在可选的(第7章)decl-specifier-seq(7.1)之后。每个声明符只能包含一个declarator-id;它对被声明的标识符进行命名。除了特殊函数(12.3, 12.4, 13.5)声明、模板特化或局部特化(14.7)声明之外,declarator-id中的unqualified-id必须是简单标识符。此外,declarator-id只在以下情况才允许使用限定形式:在所属类之外定义成员函数(9.3)或静态数据成员(9.4);在所属名字空间之外定义或显式实例化函数或变量成员;在所属名字空间之外定义已声明的显式特化;声明其它类或名字空间的成员为友元函数(11.4)。一旦declarator-id被限定,那么声明必须指向在限定符所指的类或名字空间中声明的成员,并且这个成员不能是通过使用声明(using declaration)引入的成员(如在下面的代码中关于int B::f()的定义)。[注:如果限定符为全局作用域解析操作符::,declarator-id指向在全局名字空间作用域中声明的名字。]例如:
namespace A
{
int f(){ return 0; };
};
namespace B
{
using A::f;
};
int B::f()
{
return 1;
}
main()
{
int a = A::f();
int b = B::f();
}
根据标准,不能对类或名字空间引入的名字进行定义。所以上述代码中关于int B::f()的定义应该是非法的。然而vc6能顺利编译此代码,运行后main函数中a和b的值都为0。
2、(decl-specifier-seq中的)auto, static, extern, register, mutable, friend, inline, virtual, 或typedef说明符直接作用于init-declarator-list中的每个declarator-id之上;declarator-id的类型由decl-specifier-seq和它的declarator共同决定。
3、因此,对于特定标识符的声明具有如下形式
T D
其中T为decl-specifier-seq,D为声明符。下面是确定此声明中declarator-id的类型的递归过程。
4、首先,decl-specifier-seq确定了一个类型。在声明
T D
中,声明说明符序列T确定了类型“T”。例如:在声明
int unsigned i;
中,类型说明符int unsigned确定了类型“int unsigned”(
5、对于声明T D,如果D是一个未修饰的标识符,那么此标识符的类型就是“T”。
6、对于声明T D,如果D具有形式
( D1 )
那么被包含的declarator-id的类型与下述声明所包含的declarator-id的类型相同:
T D1
括号并不改变内嵌declarator-id的类型,但却能影响复杂声明符的绑定。
- 8.3 声明符的含义
- 版权声明 缩写的含义
- 声明,定义,变量的含义
- 类中成员函数声明后面的const的含义!
- 程序实现分析C语言的声明语句含义
- 【iOS开发】 类变量(实例变量)声明的含义
- 函数声明与定义后加const的含义
- Java中类、方法声明为静态的含义
- Jsp中引用的taglib标签的声明和${pageContext.request.contextPath} 的含义
- 类变量的@protected ,@private,@public,@package,声明各有什么含义?
- struts2声明式验证 field-validator 的 type 属性有哪些取值, 代表什么含义
- 格式控制符的含义
- C# ?? 操作符的含义
- 操作符+=的含义
- "/"的含义
- /的含义
- $的含义
- *&的含义
- 推荐:麻省理工学院“开放式课程网页”和莱斯大学“Connexions”
- 让程序作为服务运行!
- BCB中如何来压缩 mdb 数据库
- 实例JSP入门(一)Html简介与JSP的世界
- 参考:跨浏览器无刷新二级联动
- 8.3 声明符的含义
- MD5之C语言源代码
- 美化你的菜单
- 个人职业生涯规划发展的一些图
- datagrid 设定列宽
- 从数据库中读数据建立菜单
- C++中的类型转换与类型识别 2
- 今天不错哦!
- c++中const的作用- -