易语言服务器租用C++| |四种强制类型转化搭建服务器租用
需要服务器咨询以下联系方式
联系人:銳輝(香港)科技 敏敏
扣扣:3007425289/2853898501
电话:18316411879
一个网站的服务器性能比较差,负载能力有限,优势面临突发流量,招架不住,直接导致服务器奔溃,网站打不开,尤其是电商网站在节日期间,因为这种情况网站打不开,导致销售额白白流失。
使用CDN后有什么有好处?
1.不用担心自己网站访客在任何时间,任何地点,任何网络运营商,都能快速打开。
2.各种服务器器虚拟主机带宽等采购成本,包括后期运维成本都会大大减少。
3.给网站直接带来的好处就是:流量,咨询量,客户量,成单量,都会得到大幅度提升。
香港免备案机器那款才是最好,香港机房现全新配置上线,机器硬件可升级,G口cn2线路独独享带宽,国内延迟低,可提升防御,死扛流量攻击,机房策略可针对各种攻击方式,公司售后7*24小时技术在线处理问题。为您的机器保驾护航。
虚拟主机就是集体宿舍 一人脚臭全屋熏天
虚拟服务器就是小户型 麻雀虽小五脏俱全
独立服务器那就是单元房了 我的地盘我做主
我们机房运营商就是开发商物业管理 欢迎您入住
服务承诺
1.提供一级电信运营商的资源。
2.可按用户要求进行IP地址指向的最优分配。
3.提供7×24小时技术支持服务。
4.如遇计划性中断,提前24小时通知。
5.根据客户需求提供流量监测,分析报告。
你找卖家,卖家再找公司,公司再找机房......
等处理好已经不是服务问题了,
而是时间,玩家流失的问题了,
这就和选老婆一样,老婆不会做家务也没用,
所以选服务器一定要选有售后保障的。
锐辉网络科技24小时在线售后!
您选择锐辉就不怕没人处理问题了!
1. 出现的原因
C语言的强制类型转换,有着两种。
隐式类型转换
显示的强制类型转换
举例:
int main()
{
int i = 1;
double d = i;//隐式类型转换
int* p = &i;
int address = (int)p;//显示强制类型转换
return 0;
}
缺陷:
转换的可视化比较差,对于隐式类型转换来说
对于所有的转化形式都是使用()类型书写的,却别程度不高
所以对于C++来说,为了加强类型转化的可视性,出现了四种强制类型转化
可以根据名字直接判断出是进行的什么类型的转化。
2. 四种类型转换分别是什么
1. static_cast
作用:用于非多态类型之间的转化(静态转化),等价于C语言中的隐式类型转化
缺点:不能用于两个不相关类型之间的转化。比如:int类型到int*类型的转化
举例:
int main()
{
int i = 1;
double d = static_cast<double>(i);
std::cout << d << std::endl;
retrun 0;
}
2. reinterpret_cast
作用:将一种类型转化为另外一种类型。等价于C语言中的显示强制类型转化
缺点:对于数据随意的转化,会出现无法预估的问题。尽量不要使用
举例:
int main()
{
int i = 10;
int* p = &i;
int j = reinterpret_cast<int>(p);
return 0;
}
3. const_cast
作用:删除变量的const属性,方便赋值
缺点:由于编译器的优化,就会导致访问const类型的变量的时候,不能实时的访问,有可能内存的值已经发生改变,但是访问到的还是旧的数据
解决:使用volatile关键字,确保内存的可见性,每次访问一个数据的时候到内存中直接去拿取数据
举例:
int main()
{
const int i = 10;
int* p = const_cast<int*>(&a);
*p = 20;
std::cout << a << std::endl;
return 0;
}
4. dynamic_cast
作用:用于将一个父类对象的指针转化为一个子类对象的指针或者引用
缺点:当父类指针本来指向的是父类对象的时候,转化之后,使用子类类型的指针进行操作的时候,有可能造成内存访问越界
改善:只有当父类指针指向的就是子类对象的时候,在使用dynamic_cast强制类型转换
注意:
dynamic_cast只能用于含有虚函数的类
dynamic_cast会先检查是否能转换成功,能成功则转化,不能则返回0
对于父类指针指向的是父类对象会出错,返回0
举例:
class A
{
public :
virtual void f(){}
};
class B : public A
{};
void fun (A* pa)
{
// dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回
B* pb1 = static_cast<B*>(pa);
B* pb2 = dynamic_cast<B*>(pa);
cout<<"pb1:" <<pb1<< endl;
cout<<"pb2:" <<pb2<< endl;
}
int main ()
{
A a;
B b;
fun(&a);
fun(&b);
return 0;
}
3. 底层原理
底层原理有着两种:
数据是真正的发生改变了,在内存中新开辟了一个空间用于存储新数据,使用新数据的时候,不会影响到原有数据
数据没有发生改变,只是类型改变了,让编译器将这个类型的数据可以认为是另外一种类型的数据,只是数据合法了
static_cast是第一种类型:
根据上面的代码:
可以明显的看到对于两个数据,其地址不一样了,所以是开辟可一个新的内存空间,用来存放新的数据
reinterpret_cast是第一种类型:
根据上面的代码:
可以看到开辟新的内存空间了。
对于函数类型之间的转化也是开辟了一个新的函数,地址发生了改变。
举例:
using namespace std;
typedef void(*FUNC)();
int DoSomething(int i)
{
cout << "DoSomething" << endl;
return 0;
}
void Test()
{
//
// reinterpret_cast可以编译器以FUNC的定义方式去看待DoSomething函数
// 所以非常的BUG,下面转换函数指针的代码是不可移植的,所以不建议这样用
// C++不保证所有的函数指针都被一样的使用,所以这样用有时会产生不确定的结果
//
FUNC f = reinterpret_cast< FUNC>(DoSomething);
f();
}
int main()
{
Test();
return 0;
103.97.34.1
103.97.34.2
103.97.34.3
103.97.34.4
103.97.34.5
103.97.34.6
103.97.34.7
103.97.34.8
103.97.34.9
103.97.34.10
103.97.34.11
103.97.34.12
103.97.34.13
103.97.34.14
103.97.34.15
103.97.34.16
103.97.34.17
103.97.34.18
103.97.34.19
103.97.34.20
103.97.34.21
103.97.34.22
103.97.34.23
103.97.34.24
103.97.34.25
103.97.34.26
103.97.34.27
103.97.34.28
103.97.34.29
103.97.34.30
103.97.34.31
103.97.34.32
103.97.34.33
103.97.34.34
103.97.34.35
103.97.34.36
103.97.34.37
103.97.34.38
103.97.34.39
103.97.34.40
103.97.34.41
103.97.34.42
103.97.34.43
103.97.34.44
103.97.34.45
103.97.34.46
103.97.34.47
103.97.34.48
103.97.34.49
103.97.34.50
103.97.34.51
103.97.34.52
103.97.34.53
103.97.34.54
103.97.34.55
103.97.34.56
103.97.34.57
103.97.34.58
103.97.34.59
103.97.34.60
103.97.34.61
103.97.34.62
103.97.34.63
103.97.34.64
103.97.34.65
103.97.34.66
103.97.34.67
103.97.34.68
103.97.34.69
103.97.34.70
103.97.34.71
103.97.34.72
103.97.34.73
103.97.34.74
103.97.34.75
103.97.34.76
103.97.34.77
103.97.34.78
103.97.34.79
103.97.34.80
103.97.34.81
103.97.34.82
103.97.34.83
103.97.34.84
103.97.34.85
103.97.34.86
103.97.34.87
103.97.34.88
103.97.34.89
103.97.34.90
103.97.34.91
103.97.34.92
103.97.34.93
103.97.34.94
103.97.34.95
103.97.34.96
103.97.34.97
103.97.34.98
103.97.34.99
103.97.34.100
|