register关键字增强

//register关键字 请求编译器让变量a直接放在寄存器里面,速度快

//在c语言中 register修饰的变量 不能取地址,但是在c++里面做了内容

/*

//1

register关键字的变化

register关键字请求“编译器”将局部变量存储于寄存器中

C语言中无法取得register变量地址

在C++中依然支持register关键字

C++编译器有自己的优化方式,不使用register也可能做优化

C++中可以取得register变量的地址

//2

C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。

//3

早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。

*/

int main22()

{

register int a = 0;

printf("&a = %x\n", &a);

system("pause");

return 0;

}

其他补充:请阅读《register关键字常识课外阅读.docx》

4.4变量检测增强

/*

在C语言中,重复定义多个同名的全局变量是合法的

在C++中,不允许定义多个同名的全局变量

C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上

int g_var;

int g_var = 1;

C++直接拒绝这种二义性的做法。

*/

int main(int argc, char *argv[])

{

printf("g_var = %d\n", g_var);

return 0;

}

4.5 struct类型加强

struct类型的加强:

C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型

C++中的struct是一个新类型的定义声明

struct Student

{

char name[100];

int age;

};

int main(int argc, char *argv[])

{

Student s1 = {"wang", 1};

Student s2 = {"wang2", 2};

return 0;

}

4.6 C++中所有的变量和函数都必须有类型

/*

C++中所有的变量和函数都必须有类型

C语言中的默认类型在C++中是不合法的

函数f的返回值是什么类型,参数又是什么类型?

函数g可以接受多少个参数?

*/

//更换成.cpp试试

f(i)

{

printf("i = %d\n", i);

}

g()

{

return 5;

}

int main(int argc, char *argv[])

{

f(10);

printf("g() = %d\n", g(1, 2, 3, 4, 5));

getchar();

return 0;

}

总结:

/*

在C语言中

int f(    );表示返回值为int,接受任意参数的函数

int f(void);表示返回值为int的无参函数

在C++中

int f(  );和int f(void)具有相同的意义,都表示返回值为int的无参函数

*/

C++更加强调类型,任意的程序元素都必须显示指明类型

4.2-4.6属于语法级别的增强

4.7新增Bool类型关键字

/*

C++中的布尔类型

C++在C语言的基本类型系统之上增加了bool

C++中的bool可取的值只有true和false

理论上bool只占用一个字节,

如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现

true代表真值,编译器内部用1来表示

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

bool类型只有true(非0)和false(0)两个值

C++编译器会在赋值时将非0值转换为true,0值转换为false

*/

int main(int argc, char *argv[])

{

int a;

bool b = true;

printf("b = %d, sizeof(b) = %d\n", b, sizeof(b));

b = 4;

a = b;

printf("a = %d, b = %d\n", a, b);

b = -4;

a = b;

printf("a = %d, b = %d\n", a, b);

a = 10;

b = a;

printf("a = %d, b = %d\n", a, b);

b = 0;

printf("b = %d\n", b);

system("pause");

return 0;

}

4.8三目运算符功能增强

1三目运算符在C和C++编译器的表现

int main()

{

int a = 10;

int b = 20;

//返回一个最小数 并且给最小数赋值成3

//三目运算符是一个表达式 ,表达式不可能做左值

(a < b ? a : b )= 30;

printf("a = %d, b = %d\n", a, b);

system("pause");

return 0;

}

2结论

1)C语言返回变量的值 C++语言是返回变量本身

C语言中的三目运算符返回的是变量值,不能作为左值使用

C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方

2)注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用

(a < b ? 1 : b )= 30;

3)C语言如何支持类似C++的特性呢?

====>当左值的条件:要有内存空间;C++编译器帮助程序员取了一个地址而已

思考:如何让C中的三目运算法当左值呢?

c++——register关键字、struct类型、bool关键字、三目运算符的更多相关文章

  1. 03C++语言对C的增强——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符

    1.“实用性”增强 C语言中的变量都必须在作用域开始的位置定义,C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义. 2.C++对c语言register的增强 register关键字 ...

  2. C++语言对C的增强(1)——实用性、变量检测、struct类型、C++中所有变量和函数都必须有类型、bool类型、三目运算符

    1.“实用性”增强 C语言中的变量都必须在作用域开始的位置定义,C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义. 2.变量检测加强 在C语言中,重复定义多个同名的全局变量是合法的: ...

  3. Docs-.NET-C#-指南-语言参考-关键字-值类型:struct

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:struct 1.返回顶部 1. struct(C# 参考) 2015/07/20 struct 类型是一种值类型,通常用来封 ...

  4. Docs-.NET-C#-指南-语言参考-关键字-值类型:bool

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:bool 1.返回顶部 1. bool(C# 参考) 2015/07/20 bool 关键字是 System.Boolean  ...

  5. C++ c++与C语言的区别(struct类型的加强,函数-变量类型加强,bool类型)

    //区别④:struct类型的加强(C++版本) #include<iostream> using namespace std; //C++中的struct是一个新类型的定义声明 //c+ ...

  6. Go语言学习笔记(二) [变量、类型、关键字]

    日期:2014年7月19日 1.Go 在语法上有着类 C 的感觉.如果你希望将两个(或更多)语句放在一行书写,它们 必须用分号分隔.一般情况下,你不需要分号.   2.Go 同其他语言不同的地方在于变 ...

  7. 『Python基础-3』变量、定义变量、变量类型、关键字Python基础-3』变量、定义变量、变量类型、关键字

    『Python基础-3』变量.定义变量.变量类型.关键字 目录: 1.Python变量.变量的命名 2.变量的类型(Python数据类型) 3.Python关键字 1. Python 变量.变量的命名 ...

  8. Docs-.NET-C#-指南-语言参考-关键字-值类型:可以 null 的值类型

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:可以 null 的值类型 1.返回顶部 1. Nullable value types (C# reference) 2019 ...

  9. Docs-.NET-C#-指南-语言参考-关键字-值类型-:浮点数值类型

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型-:浮点数值类型 1.返回顶部 1. 浮点数值类型(C# 引用) 2019/10/22 “浮点类型”是“简单类型”的子集,可以使 ...

随机推荐

  1. wamp 安装monggo扩展

    1.下载对应的monggo扩展 http://pecl.php.net/package/mongo 2. 找对应的版本 放在D:\program\wamp\bin\php\php5.5.12\ext ...

  2. csharp:获取 DNS、网关、子网掩码、IP

    /// <summary> /// DNS.网关.子网掩码.IP /// 涂聚文 2015 /// </summary> public class IPAddressStrin ...

  3. 虚拟主机服务器php fsockopen函数被禁用的解决方法

    为了服务器安全考虑很多主机商禁用了php的fsockopen函数,昨天进博客,使用cos-html-cache生成静态文件,尼玛提示: Warning: fsockopen() has been di ...

  4. 12:计算2的N次方

    12:计算2的N次方 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 任意给定一个正整数N(N<=100),计算2的n次方的值. 输入 输入一个正整数N ...

  5. OTSU算法学习 OTSU公式证明

    OTSU算法学习   OTSU公式证明 1 otsu的公式如下,如果当前阈值为t, w0 前景点所占比例 w1 = 1- w0 背景点所占比例 u0 = 前景灰度均值 u1 = 背景灰度均值 u = ...

  6. Spring Boot--01错误处理

    package com.smartmap.sample.ch1.controller.view; import java.io.IOException; import java.util.Collec ...

  7. 使用jvisualvm的jstatd方式远程监控Java程序

    使用Java自带的jvisualvm调试Java程序,可以查看CPU.内存.类及线程等信息,还可以进行Dump,无疑是一个利器 由于客户端是Windows.服务端是Linux,并且是最小安装的Linu ...

  8. Storm监控文件夹变化 统计文件单词数量

    监控指定文件夹,读取文件(新文件动态读取)里的内容,统计单词的数量. FileSpout.java,监控文件夹,读取新文件内容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  9. PyQt4(简单信号槽)

    import sys from PyQt4 import QtCore, QtGui class myWidget(QtGui.QWidget): def __init__(self): super( ...

  10. 【Java】读写文本文件

    package rw; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutput ...