C++引用,常量优化,四种类型转换符

变量引用变量的别名,常量引用要加const,引用与被引用的东西是同一样。

#include <string>
#include <ctype.h>
#include <vector>
#include <iostream>
#include <fstream>

// using declarations states our intent to use these names from the namespace std
using namespace  std;

int main()
{
    int var = 3;
    int &r_var = var; //变量
    const int &r_var1 = 123; //常量的引用要加const表明r_var1是const int类型的引用
    const int &r_var1 = var+123; //var+123 中间变量的引用
    int &r_var2 = r_var;//引用后同样也可以引用
    return 0;
}

c++在内部进行了大量的优化工作,如果给一个值生命为const,那么以后每次读取都不会重新从内从中读取数据加快常量访问速度,只会读取第一次给定的值

但是volatile关键字可以改变const的这种性质,在定义后的每次读取数据中都会重新从内存中读取。

#include <string>
#include <ctype.h>
#include <vector>
#include <iostream>
#include <fstream>

// using declarations states our intent to use these names from the namespace std
using namespace  std;

int main()
{
    const int n = 100; //后面使用n的值都用100代替
    volatile const int m = 200; //m以后每次使用都从内存中读取

    int *p = (int *)&n;
    *p = 110;
    cout << "n = " <<n << endl; //输出100,n没有改变     //这里我想说n其实不是没有改变,如果进入内存中n的地址的时候,会发现其存储的值是110,只是c++做了优化,不再读取内存的值
    p = (int *)&m;
    *p = 210;
    cout << "m = " << m << endl; //输出210,m被改变
    return 0;
}

C++提供了四种类型转换符,规定这四种转换符是为了明确转换的目的。

#include <string>
#include <ctype.h>
#include <vector>
#include <iostream>
#include <fstream>

// using declarations states our intent to use these names from the namespace std
using namespace  std;

int main()
{
    /*
    第一,之所以设置的那么长那么丑是为了防止程序员使用,c++中不建议用强制类型转换,设置好对的类型就不需要转换
    第二,为了方便找到程序中哪里用到了强制类型转换

    static_cast; 用于数值类型的转换,以及有一方是void*类型的转换
    const_cast;用于临时去掉const, volatile限制,转换用于语句本身,出了语句就没有了,进行常变量的转换
    reinterpret_cast;用于任意两种指针之间,以及指针与数值类型之间的转换,最危险
    dynamic_cast;用于父子类之间的转换
    */

    //int n = 12.34; //会有警告
    int n = static_cast<int>(12.34);//无警告
    //int *p = calloc(sizeof(int), 10); //错误
    int *p = static_cast<int*>(calloc(sizeof(int), 10));

    const int k = n; //这里c++不会优化,因为n本来就是变量,而不是具体的数值,没优化的必要
    const_cast<int&>(k); //将k转换为int类型,但是由于这种转换只对这条语句有用,那么我们这采用引用来保持这种转换

    float f = 12.34;
    p = reinterpret_cast<int *>(&f);
    cout << "p‘s value is " << *p << endl;
    return 0;
}

C++引用,常量优化,四种类型转换符,布布扣,bubuko.com

时间: 2024-07-30 13:40:11

C++引用,常量优化,四种类型转换符的相关文章

[转]C++中四种类型转换符的总结

C++中四种类型转换符的总结 一.reinterpret_cast用法:reinpreter_cast<type-id> (expression)    reinterpret_cast操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换,即二进制值没有变.例如: int n=9; double d= reinterpret_cast< double > (n); 在进行计算以后, d 包含无用值. 这是因为 reinterpret_cast 仅仅是复

C++ Primer笔记2_四种类型转换_异常机制

1.类型转换 命名的强制类型转换: 有static_cast.dynamic_cast.const_cast.reinterpret_cast static_cast: 编译器隐式执行的任何类型转换都可以由static_cast完成 当一个较大的算术类型赋值给较小的类型时,可以用static_cast进行强制转换. 可以将void*指针转换为某一类型的指针 可以将基类指针强制转换为派生类指针,但是不安全. 无法将const转化为nonconst,这个只有const_cast才可以办得到 举例:

c++四种类型转换操作符简要总结

1.  static_cast<target>(expression) 可用于存在继承关系的类指针/引用之间的向上向下转换.执行向下转换时没有安全检查(区别于dynamic_cast),所以如果实际类型与目标类型不符合,编译虽然可以通过,但运行时的后果未定义. void*指针转换为实际的指针 其他基本类型的隐式转换以及反方向的转换,如:int <-> double 2.  dynamic_cast<target>(expression) 只能用于target为类指针或者

Java中类的继承,属性和方法的四种修饰符的作用范围,final关键字,java的三大特点中的2个:封装和多态,以及多态的一个设计模式,模板方法模式(template method)

(一)Java中的继承: 关于继承,在Java中类的继承只能是单继承,不像C+++那样灵活,可以多继承,多继承的后果就是各种关系乱套,就相当于一个孩子有2个母亲一样,社会关系的复杂,不利于程序后期的开发和维护,所有Java中的类是只能单继承,通过接口来实现多继承:对于接口的话,是可以多继承的,例如:A接口可以同时继承接口B和接口C,但是有一点要注意,就是实现接口A的类必须要实现接口A.B.C中所有的抽象方法:接口之所以可以多继承,就是因为接口结构比较简单. 继承是通过extends关键字来实现,

c++的四种类型转换

C++中四种类型转换方式 类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的,但是传统的c语言风格的类型转换没有区分这些.还有一个缺点就是,c风格的转换不容易查找,他由一个括号加上一个标识符组成

C++四种类型转换

C++有4种类型转换,reinterpret_cast, static_cast, dynamic_cast 和 const_cast reinterpret_cast reinterpret_cast 可以将一个指针转换为任意其它类型的指针或int,或反之亦可. 可以在互不相关的类之间进行指针转换,它只是简单地将一个指针的二进制数据复制到另一个指针,对指针指向的内容不做任何检查或转换. class A {}; class B {}; A * a = new A; B * b = reinter

php基础知识掌握——四种界定符

闲来无事,研究了与java.c#完全不同的领域php,php即(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”),对于学习php的初学者,不得不掌握apache的部署,apache的部署,后面会讲到,当然对php.apache.mysql现在也有比较多一键式部署工具,例如WAMP(windows.apache.mysql.php):资源网上比较多,这里就不讲相关的资源链接发出来了,为避免出现获取积分的嫌疑:言归正传,下面就讲讲php的基础知识吧. 四种

C++中四种类型转换方式

类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的,但是传统的c语言风格的类型转换没有区分这些.还有一个缺点就是,c风格的转换不容易查找,他由一个括号加上一个标识符组成,而这样的东西在c++程序

面试系列 --- c++四种类型转换

类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的,但是传统的c语言风格的类型转换没有区分这些.还有一个缺点就是,c风格的转换不容易查找,他由一个括号加上一个标识符组成,而这样的东西在c++程序