1.c++中所有变量可以在使用前定义。

for(int i =  ; i< ; i++)
{
for(int j = ; j< ; j++)
{
do_sth;
}
}

2. c++ 中可以获得 register 变量的地址。

register 关键字是请求编译器将局部变量设置为寄存器变量。

(如果有代码要取 register 变量的地址,编译器将变量的 register 属性变无效)

3. c++ 中不可以定义两个同名的全局变量。

4. c++ 中 struct 定义了一种全新的类型

struct student
{
char* name;
int age;
};

5. c++中所有标识符必须显示的声明,不支持默认类型。

  int fun();  //error

6. const 关键字

1. 在c语言中 const 为变量

  const 高数编译器其修饰的变量在编译期只可做左值。编译期有空,运行期无用。

  const 修饰的全局变量在只读存储区分配空间,修饰的局部变量在栈上分配空间。

  只有枚举enum定义的标识符才是常量。

int main(void)
{
const int a=;
int *p = (int *)&a;
*p = ;
printf("%d",a);// c++ 0
           // c 5
 printf("%d",*P);// C++ 5
}

2. 在c++中 const 为真正地常量

  编译器在编译const 修饰的变量时直接将其对应的符号表中放入常量值,在其后遇到该常量时将符号表的常量值取出并替换成常量值。

  例外: 在 & extern 操作符和关键字修饰时为常量分配存储空间,但不会使用储存空间的值(兼容C语言)。

  3. 在c++中const什么时候为只读变量?什么时候为常量?

    a. 使用字面量初始化的const常量是真正的常量,进入常量符号表。

    b. 使用变量初始化的const常量是只读变量,不进入常量符号表。

    c. 被volatile修饰的const常量是只读变量,不进入常量符号表。

    d. 在编译期间无法确定初始值的const常量是只读变量,不进入常量符号表。

    volatile const int y = ;       // y为只读变量
int* p = const_cast<int*>(&y); // p为普通变量
*p = ;
printf("y = %d\n", y); //
printf("p = %d\n", *p); //
const int z = y; // z为只读变量
    const int x = 1;                 // x为真正的常量,将x放入常量符号表中。
const int& rx = x; // rx为只读变量,编译器为x创建了四字节空间,并让rx作为空间的别名。
int& nrx = const_cast<int&>(rx); // nrx为普通变量,去掉只读变量rx的只读属性,代表的内存空间时rx的内存空间。
nrx = 5;
printf("x = %d\n", x); // 1
printf("rx = %d\n", rx); // 5
printf("nrx = %d\n", nrx); // 5
printf("&x = %p\n", &x); // addr1
printf("&rx = %p\n", &rx); // addr1
printf("&nrx = %p\n", &nrx); // addr1

7. 布尔类型

  bool 类型用一个字节存储,取值 ture / false (C++关键字)

  ture 编译器内部用1表示,表示真。

  false编译器内部用0表示,表示非真值。

  布尔类型支持数学运算,运算结果将被转换(将非0值转化为ture,将0值转化为false)

bool a=;
printf("%d",a); //
a++;
printf("%d",a); //
a-=;
printf("%d",a); //

8. 三目运算符

int a = , b = ;
(a < b) ? a : b = ; (a < b) ? a : 2 = 3; //error

c: 三目运算符返回表达式中 a 变量的值

c++:三目运算符返回表达式中 a 变量本身,只有a,b为变量才可以将整个表达式作为左值。

当三目操作符可能返回中都是变量时,返回的是变量的引用。

当三目操作符可能返回中有常量时,返回的是值。

int a = ,b = ;
(a < b)? a : b = ; // 返回a或b的引用
(a < b)? 1 : b = ; // 返回1或b的值 error

C++(+类型加强 +加入面向对象)的更多相关文章

  1. C语言利用 void 类型指针实现面向对象类概念与抽象。

    不使用C++时,很多C语言新手可能认为C语言缺乏了面向对象和抽象性,事实上,C语言通过某种组合方式,可以间接性的实现面对对象和抽象. 不过多态和继承这种实现,就有点小麻烦,但是依然可以实现. 核心: ...

  2. C语言利用 void 类型指针实现面向对象类概念与抽象

    不使用C++时,很多C语言新手可能认为C语言缺乏了面向对象和抽象性,事实上,C语言通过某种组合方式,可以间接性的实现面对对象和抽象. 不过多态和继承这种实现,就有点小麻烦,但是依然可以实现. 核心: ...

  3. 面向对象的JavaScript --- 动态类型语言

    面向对象的JavaScript --- 动态类型语言 动态类型语言与面向接口编程 JavaScript 没有提供传统面向对象语言中的类式继承,而是通过原型委托的方式来实现对象与对象之间的继承. Jav ...

  4. Object-C中动态类型对象相关操作汇总

    Object-C(以后简称OC)中有id类型,相对于明确定义类型的静态类型,称为动态类型. 使用动态类型,配合多态(不同类型拥有同名方法),动态绑定(运行时决定实际调用的方法)可以将很多判断延迟到运行 ...

  5. 【翻译自nikic大神】PHP中原生类型的方法

    引言 第一次,翻译别人的文章,用四级英语的水平来翻译~~囧,可能有很多不太恰当的地方,尽管拍砖(有些地方实在想不到恰当的翻译,我同时贴出了原文和自己很low的翻译). 翻译这篇文章用了我3个晚上一个中 ...

  6. RTTI (Run-Time Type Identification,通过运行时类型识别) 转

    参考一: RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型.   RTTI提供了以下两个 ...

  7. 3、面向对象以及winform的简单运用(类的初步认识)

    什么是类? “类”是面向对象编程的基本单元,一个类一般包含两种成员:字段和方法——即变量和函数. 例: //字段或变量的定义 public int age; //方法或函数的定义 public int ...

  8. Python_day8_面向对象(多态、成员修饰符、类中特殊方法、对象边缘知识)、异常处理之篇

    一.面向对象之多态 1.多态:简而言子就是多种形态或多种类型 python中不支持多态也用不到多态,多态的概念是应用与java/C#中指定传参的数据类型, java多态传参:必须是传参数的数据类型或传 ...

  9. python运维开发(八)----面向对象(下)

    内容目录: 面向对象三大特性之多态性 面向对象中的成员:字段.方法.属性 类的成员修饰符 类的特殊成员 特殊成员方法 面向对象其他 异常处理 设计模式之单例模式 面向对象的多态性 多态性:即指多种形态 ...

随机推荐

  1. Linux内核同步

    Linux内核剖析 之 内核同步 主要内容 1.内核请求何时以交错(interleave)的方式执行以及交错程度如何. 2.内核所实现的基本同步机制. 3.通常情况下如何使用内核提供的同步机制. 内核 ...

  2. Unity3D中录制和输出wav文件

    近期在做视频录制方面的事情,看了下音频的录制和输出.主要参考官方的FrameCapturer: https://github.com/unity3d-jp/FrameCapturer wav文件结构较 ...

  3. 什么是SPU、SKU、ARPU

    这是一篇存档性笔记,我自己存档一下对这3个词的理解.如果你已经明了了这3个词的意思,请直接忽略之 首先,搞清楚商品与单品的区别.例如,iphone是一个单品,但是在淘宝上当很多商家同时出售这个产品的时 ...

  4. 【规范】前端编码规范——css 规范

    编码 在 css 首行设置文件编码为 UTF-8. @charset "UTF-8"; class 命名 class 名称应当尽可能短,并且意义明确.使用有意义的名称,使用有组织的 ...

  5. chrome 下 input[file] 元素cursor设置pointer不生效的解决

    https://jingyan.baidu.com/article/48b558e32fabb67f38c09a81.html 环境是chrome浏览器,今天发现为html网页中的input [fil ...

  6. linux清理日志脚本

    1.删除日志的命令 find 目录路径 -mtime +天数 -name "文件名" -exec rm -rf {} \; 例如:#!/bin/bash find /usr/loc ...

  7. Xilinx 学习笔记1---新建工程和创建源代码文件

    最近终于有空可以记录一些之前学习的内容,本博客系列记录笔者Xilinx ISE学习之旅,当然现在Vivado是学习热门,一步一步来.搞定 ISE,Vivado上手也会很快. 1.安装软件 软件部分的下 ...

  8. Android 8 蓝牙 连接过程

    packages\apps\Settings\src\com\android\settings\bluetooth\BluetoothPairingDetail.java @Override void ...

  9. VS2017 调试 Unity3D 脚本

    1. 安装Unity3D最新版本.   https://unity3d.com/cn/get-unity/download 2. 安装Visual Studio Community 2017. htt ...

  10. 编译lua动态库

    编译动态库,静态库参考https://blog.csdn.net/yzf279533105/article/details/77586747 centos默认安装了lua5.1,使用rpm删除,yum ...