这一次,是关于声明的一个小问题:

#include <stdio.h>

int j = 24; 
int main() 

    int i = j, j; 
    j = 42; 
    printf("%d %d\n", i, j); 
}

这能通过编译吗?能
这不会产生未定义行为吗?不会
这程序甚至不是ill-formed(ill-formed就是C++支持但不推荐的写法),
输出的结果是:
24 42
这个问题并不难猜到答案,但是大概大部分同学都不敢很肯定地说出来。我们来看看标准如何解释的这个问题:

j这个名字被声明了两次(也使用了两次),第一个j声明的区域涵盖了整个例子,第一个j的潜在可用域从这个j的后面立刻开始一直延伸到程序结束,但是它(实际上)的作用域不包括,和}之间的文本。第二个j声明的区域包括{和}之间的所有文本,但是它的潜在可用域不包括i的声明。第二个j声明的实际作用域和潜在可用域是相同的。 下面我补了一张图,蓝色部分就是第二个j的实际作用域。

int j = 24;
int main()
{
    int i = j, j;
    j = 42;
    printf("%d %d\n", i, j);
}

从上面看出C++声明精确地从声明的点开始有效,但是还有一些特别要注意的地方,这里又有几条C++标准中的小例子,猜猜它们的结果:

int x = 12; 
{ int x = x; }
const int i = 2; 
{ int i[i]; }
const int x = 12; 
{ enum { x = x }; }

struct X {
    enum E { z = 16 };
    int b[X::z];
};

答案:

1.第二个x被以它自己的值初始化,变量声明在初始化之前生效。

2.数组i被正确初始成大小2,外层变量直到声明的那一点,都是可见的。

3.enum中的x被正确初始化为12,枚举类型的声明点紧接它的定义之后(也就是,枚举类型声明位于声明生效点之前。)。

4.数组b被正确初始化为大小16,一个类成员的定义点之后,类的域中就能查找到这个名字。

That’s all, thanks.

from: http://www.cnblogs.com/winter-cn/archive/2009/11/18/1605662.html

C++,那些可爱的小陷阱(二)相关推荐

  1. C++,那些可爱的小陷阱(一)

    此系列是为那些读过TC++PL或者具有类似水平的同学准备的,作为系列的第一篇以及有趣的热身,我们来看一个链接问题: D1.cpp #include <stdio.h> struct X { ...

  2. C++,那些可爱的小陷阱(三)

    我们沿袭忠于标准的传统,还是首先来看一个标准中的例子 ??=define arraycheck(a,b) a??(b??) ??!??! b??(a??) 这真是一段XE的代码,你看懂什么意思了么?好 ...

  3. 可爱的小老鼠计算机教案,大班语言儿歌教案《小老鼠玩电脑》

    教学目标: 1.理解儿歌内容,学会说儿歌. 2.能运用手偶大胆表演儿歌. 3.体验说儿歌的乐趣. 4.让幼儿感受歌曲欢快的节奏. 5.培养幼儿的音乐节奏感,发展幼儿的表现力. 教学重点难点: 重点:理 ...

  4. 计算机绘画小房子教案,可爱的小房子──《画方形和圆形》教学案例

    一.教材.学情分析 本课是江苏省信息技术教材第11课<画方形和圆形>的教学内容,主要学习画椭圆.矩形.圆角矩形工具的使用方法.课本以画小房子为例,介绍了画椭圆.矩形.圆角矩形的步骤,有利于 ...

  5. 计算机可爱的企鹅教案,《可爱的小企鹅》教案

    目标: 初步了解企鹅的外形特征及生活习性. 准备: 1.制作动画片.(一群姿态不一的企鹅在南极的雪地上嬉戏) 2.企鹅头饰若干.配班教师扮大企鹅. 3.企鹅标本一个. 过程: 1.幼儿观看动画片< ...

  6. 可爱的小海豚:MySQL 数据库

    可爱的小海豚:MySQL 数据库 一.关系型数据库是什么 1.1 什么是数据库 本质上讲,数据库(Database,DB)是数据的集合,它具有统一的结构形式并存放于 统一的存储介质内,是多种应用数据的 ...

  7. 可爱的小老鼠计算机教案,中班美术《可爱的小老鼠》

    中班美术<可爱的小老鼠> 发布时间:2017-04-09 成长目标1. 能掌握正确的剪贴方法.2. 发挥想象,尝试动手制作立体卡通动物造型.3. 体验气球塑形的乐趣. 重点 能掌握正确的剪 ...

  8. 一、让LCD显示可爱的小企鹅

    一.让LCD显示可爱的小企鹅 还是先说说环境吧,处理器为S3C2410,linux的版本当然是2.6.20的.下面先说说怎样让LCD上显示出可爱的小企鹅.最直接的步骤如下(记住不要问为什么哈-_-,一 ...

  9. SQLcl这个可爱的小工具,来了解一下呀~

    无论是Oracle的新手还是专家,几乎每天都在使用SQL*Plus,因为这个工具是Oracle Database原生的,无需额外安装就可使用,并且这是一个命令行工具,只要能访问到操作系统,无论是Lin ...

最新文章

  1. C语言入门经典读书笔记 ----第六章 字符串和文本的应用
  2. P1005 采药(Tyvj)
  3. 分享Spring中Bean的4种依赖检查模式
  4. asyncio协程与并发
  5. Markdown编辑器模板
  6. squirrel-foundation-demo
  7. 中国可打印标签市场趋势报告、技术动态创新及市场预测
  8. 第 9 章 适配器设计模式
  9. java利用poi生成/读取excel表格
  10. http实时推送技术
  11. 计算机系统运维服务方案,xx局信息化系统运维服务方案+标准版.doc
  12. 充电器input与output_input和output的区别
  13. [CEOI2017]Mousetrap
  14. cherry MX-BOARD 3.0 拆解
  15. 2018年下半年信息系统项目管理师考试真题附答案解析(5)
  16. 在校学生适合的云服务器有哪些?
  17. AMD,在竞争中蜕变!
  18. 使用 htop 和 ps 来监控 Linux 运行
  19. 从充电宝到换电站,数字孪生原来可以这样用
  20. 逻辑思维类面试题汇编七

热门文章

  1. LR模型常见问题小议
  2. 联想正遭遇第四道坎 柳传志对症下药
  3. [斯坦福创业课]Jeff谈LinkedIn的同理心管理
  4. java function获取参数_「Java容器」ArrayList源码,大厂面试必问
  5. Java8 - 自定义实现体会CompletableFuture的原理
  6. Spring-AOP 通过配置文件实现 后置增强
  7. mysql数据库连接配置路径_[zz]MySQL数据库主从同步安装与配置总结
  8. python 合并两个排序的链表(递归解法)
  9. 超链接的内部链接和外部链接
  10. QT教程3: 日期和时间的对象操作