下列程序中,K的值为:6

enum {
a,b=5,c,d=4,e
}k;
K=c;

  分析:enum中,首元素不赋值的话,默认为0;后一个元素不赋值的话比前一个元素大1.

 程序运行正常。

#include<iostream>
using namespace std;
int main() {
http://www/taobao.com
cout<<"welcometo taobao"<<endl;
}

分析:(http:)相当于一个label,类似于访问限定符private,public;程序可以正常运行。

双斜杠之后的www.csdn.NET被当做注释了,那么前面的http:是否合法?这就是C++中一个几乎不会被用到的语法,标签。
带标签的语句是一种特殊的语句,在语句前面有一个标识符(即标签,上段代码中的http)和一个冒号。
使用goto label就可以跳到标签处执行,比如可以在代码中写goto http,这样就会执行cout语句了。case就是一种标签,case关键字和它对应的值一起,称为case标签。类中的public、private、protect也是标签,称为成员访问标签。

若PAT是一个类,则程序运行时,语句”PAT(*ad)[3];”调用PAT的工作函数次数是:0

分析:PAT(*ad)[3];

ad首先是个指针;

ad是个指向有着三个PAT元素的数组的指针;

这里只是声明了指针,虽然指针指向的数组有三个PAT对象,但是没有实例化其中的对象,所以并没有调用构造函数。

某些运算符必须重载位成员函数,比如operator new;

某些运算符必须重载位非成员函数,比如 operator >>……

代码生成阶段的主要任务:把中间代码变换成依赖具体机器的目标代码。

源码 ->(扫描)-> 标记 ->(语法分析)-> 语法树 ->(语义分析)-> 标识语义后的语法树 ->(源码优化)-> 中间代码 ->(代码生成)-> 目标机器代码 ->(目标代码优化)-> 最终目标代码

共享内存:是在2个正在运行的进程间传递数据的一种非常有效方式。共享内存允许两个不相关进程访问同一个逻辑内存。由于它们并没有提供同步机制,所以我们通常需要用其他的机制来同步访问共享的内存。

进程间通信方法有:文件映射、共享内存、匿名管道、命名管道、邮件槽、剪切板、动态数据交换、对象连接与嵌入、动态连接库、远程过程调用等

几种进程间的通信形式:管道、有名管道、信号量、信号、共享内存、消息队列、套接字

几种线程间的同步形式:事件、临界区、互斥量、信号量

static成员函数,static成员是类的组成部分并不是任何对象的组成部分,因此,static成员函数没有this指针。我们知道,一般而言,类中的成员函数具有一个附加的隐含实参,即指向该类对象的一个指针。这个隐含实参命名为this。因为static成员函数不是任何对象的组成部分,所以static成员函数就没有this形参了。由于成员函数声明为const说明该成员函数不会修改该成员函数所属的对象,所以static成员函数不能声明为const。为什么呢?因为static成员函数不是任何对象的组成部分。static成员函数可以直接访问所属类的static成员,但是不能直接使用非static成员函数!也不能访问static const 类型的成员!

 

补充:

1) 静态成员变量可被该类的所有方法访问;(静态成员属于整个类,而不是某个对象,可以被所有方法访问,所有子类也可以访问父类静态成员)

2) 该类的静态方法只能访问该类的静态成员函数;(不能访问非静态成员函数)

3) 静态成员可以被任一对象修改,修改后的值可以被所有对象共享;

4) 子类可以访问父类的静态成员

5) 静态成员无多态性

8、内联函数,当函数代码较小且被频繁调用的时候,最有用。

分析:内联函数只适合于只有1~5行的小函数。对一个含有许多语句的大函数,函数调用和返回的开销相对来说微不足道,所以也没有必要用内联函数实现。

在内联函数内不允许用循环语句和开关语句。否则编译将该函数视同普通函数。

 

内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。内联扩展是用来消除函数调用时的时间开销。它通常用于频繁执行的函数。一个小内存空间的函数非常受益。

C代码中的,最后一行chardata[0];的作用:方便管理内存缓冲区、减少内存碎片化

typedef struct list_t {
structlist_t *next;
structlist_t *prev;
chardata[0];
}list_t;

  

分析:柔性数组,它只能放在结构体末尾,

申明一个长度为0的数组,就可以使得这个结构体是可变长的。对于编译器来说,此时长度为0的数组并不占用空间,因为数组名本身不占空间,它只是一个偏移量,数组名这个符号本身代表了一个不可修改的地址常量(注意:数组名永远都不会是指针!),但对于这个数组的大小,我们可以进行动态分配 请仔细理解后半部分,对于编译器而言,数组名仅仅是一个符号,它不会占用任何空间,它在结构体中,只是代表了一个偏移量,代表一个不可修改的地址常量!

 

对于0长数组的这个特点,很容易构造出变成结构体,如缓冲区,数据包等等:

注意:构造缓冲区就是方便管理内存缓冲区,减少内存碎片化,它的作用不是标志结构体结束,而是扩展。

柔性数组是C99的扩展,简而言之就是一个在struct结构里的标识占位符(不占结构struct的空间)。

10 

假设CSomething是一个类,执行下面这些语句后,内存里创建了6个CSomething对象。

 

CSomething a();//没有创建对象,这里不是使用默认构造函数,而是定义了一个函数,在C++ Primer393页中有说明。

CSomething b(2);//使用一个参数的构造函数,创建了一个对象。

CSomething c[3];//使用无参构造函数,创建了3个对象。

CSomething &ra=b;//ra引用b,没有创建新对象。

CSomething d=b;//使用拷贝构造函数,创建了一个新的对象d。

CSomething *pA = c;//创建指针,指向对象c,没有构造新对象。

CSomething *p = new CSomething(4);//新建一个对象。

//综上,一共创建了6个对象。

 

补充:注意区别:

CSomething a();

CSomething a;

前者是一个函数的声明,与默认构造函数区分;//返回类型为CSomething,形参表为空

后者是一个对象的定义;

C++学习(16)

C++学习(17)

32 C++常见错误集锦的更多相关文章

  1. (转)Hadoop之常见错误集锦

     Hadoop之常见错误集锦            下文中没有特殊说明,环境都是CentOS下Hadoop 2.2.0.1.伪分布模式下执行start-dfs.sh脚本启动HDFS时出现如下错误:   ...

  2. Python:常见错误集锦(持续更新ing)

    初学Python,很容易与各种错误不断的遭遇.通过集锦,可以快速的找到错误的原因和解决方法. 1.IndentationError:expected an indented block 说明此处需要缩 ...

  3. java Web 常见错误集锦 及解决方法

    只能删除pid为整数的商品,32位的pid商品不能删除? 原因onclick="agree('${s.pid}')"  括号中需要加 ' ' 删除多余的工作空间? 使用prefer ...

  4. ubuntu安装php常见错误集锦

    一.configure 报错 1.错误类型: Configure: error: Please reinstall the libcurl distribution-easy.h should be ...

  5. hadoop常见错误集锦

    1  Hadoop namenode -format后Incompatible namespaceIDS 错误解决办法 重新格式话namenode后,会重新分配一个namespaceId, 这个nam ...

  6. Oracle常见错误集锦

    1.ORA-12560:TNS:协议适配器错误 OracleService<SID>服务没有启动 2. ORA-12541:TNS:无监听程序 Oracle<ORACLE_HOME& ...

  7. Sliverlight常见错误集锦

    1. 使用GridSplitter时候(参考),出现如下错误 C# 中的错误Error 2 The type 'sp:GridSplitter' was not found. Verify…… 对程序 ...

  8. PCL常见错误集锦

    来自微信公众号的分享 我刚刚开始接触PCL,懂的东西也很少,所以总是出现各种各样的问题,每次遇见问题的时候要查找各种各样的资料,很费时间.所以,今天我把我遇见的常见问题分享给大家,讲解的步骤尽量详细, ...

  9. mysql编译安装后各种常见错误集锦

    1.ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', sys ...

随机推荐

  1. [转]有return的情况下try catch finally的执行顺序

    结论: 1.不管有没有出现异常,finally块中代码都会执行: 2.当try和catch中有return时,finally仍然会执行: 3.finally是在return后面的表达式运算后执行的(此 ...

  2. centos7中安装、配置jdk(转载)

    参考命令:http://www.jb51.net/os/RedHat/73016.html来进行安装 安装说明 系统环境:centos7安装方式:rpm安装软件:jdk-8u25-linux-x64. ...

  3. for loop

    https://www.cnblogs.com/EasonJim/p/8315939.html

  4. How Many Triangles (极角排序 + 尺取法)

    题意:二维平面与有很多个点,然后求构成锐角三角形的个数. 思路:对于每一个三角形我们知道存在至少2个锐角,只要有一个钝角就不行了,所以我们的想法就是枚举所有夹角的状态,然后得知情况,确定用总个数减去- ...

  5. codeforces 982B Bus of Characters

    题意: 有n排座位,每排有两个座位,每排座位的宽度都不一样. 有2 * n个人要上车,如果是内向的人,那么它会选择一排两个都是空位并且宽度最小的一排去坐: 如果是外向的人,会选择一排座位已经有人坐的, ...

  6. 1001 害死人不偿命的(3n+1)猜想 (15 分)

    卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 ...

  7. wm_concat函数oracle 11g返回clob

    用wm_concat连接拼接字符串,测试环境是10g,一切正常 到了生产环境是11g,点开直接报错了 wm_concat函数在oracle 10g返回的是字符串,到了11g返回的是clob 解决办法: ...

  8. Python Semaphore

    Semaphore信号量的使用 信号量: 互斥锁 同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据 ,比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里面有人 ...

  9. win10虚拟桌面使用方法-提高工作效率

    任务栏右键 => 显示任务视图按钮 然后坐下角出现的任务视图按钮可以添加虚拟桌面 快捷键: win + ctrl + 左/右 切换桌面 win + tab 打开任务视图 win + ctrl + ...

  10. 利用jQuery实现用户名片小动画

    我爱撸码,撸码使我感到快乐!大家好,我是Counter.下面给大家介绍利用jQuery实现的小动画,非常的简便,如果有原生js操作的话,那么就不止这么多行了.至于CSS,个人觉得,这边CSS布局也蛮重 ...