当前位置: 首页 > news >正文

做app做网站从何学起怎么注册一个自己的网址

做app做网站从何学起,怎么注册一个自己的网址,wordpress使用难不难,南京网站建设 雷一、C语言中的类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与 接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型 …

一、C语言中的类型转换

在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与
接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型
转换和显式类型转换。

1.1、 隐式类型转化

隐式类型转换,也称自动类型转换,是指不需要用户干预,编译器默认进行的类型转换行为,使得两个变量的数据类型一致,才能进行相关的计算。它通常发生在赋值转换和运算转换两种情况。
  • 赋值转换:将一种类型的数据赋值给另外一种类型的变量时,发生隐式类型转换。例如:
int x = 1.23; // 1.23是double类型,先隐式转换为int
  • 运算转换:C语言中不同类型的数据需要转换成同一类型,才可以进行计算。字符型、整型、浮点型之间的变量通过隐式类型转换,可以进行混合运算(不是所有数据类型之间都可以隐式转换)。

总的来说,C语言的隐式类型转换发生在意义相近的类型之间,例如整型和浮点型家族,它们都是表示数字的规模。将一个数字转化为一个对象这样的操作,显然不是编译器应该自动做的。

1.2、显式类型转化

显式类型转换则是我们人为地进行数据类型的转换,这里可以理解为是一种强制的类型的转换。这种转换将不再遵守上面的转换规则,而是按照我们人为地标明的类型进行转换。就是在我们需要指定类型的变量前加上数据类型,并用圆括号包裹。例如:(int)a(float)b(long)c等。

总的来说,显式类型转换有各自的意义,例如整型转换成指针类型。

1.3、特点

  • 优点:在于它能够帮助我们解决一些特殊情况下的问题。例如,当我们需要将一个浮点数赋值给一个整型变量时,隐式类型转换会自动将浮点数转换为整型,使得程序能够正常运行。显式类型转换也可以用来解决一些特殊情况下的问题。

  • 缺点:隐式类型转换可能会导致数据失真(精度降低),因此不一定是安全的。显式类型转换也可能会导致数据失真或其他问题。因此,在使用类型转换时应谨慎。

void Test ()
{int i = 1;// 隐式类型转换double d = i;printf("%d, %.2f\n" , i, d);int* p = &i;// 显示的强制类型转换int address = (int) p;printf("%x, %d\n" , p, address);
}

二、C++强制类型转换

标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符: static_cast、
reinterpret_cast、const_cast、dynamic_cast

2.1、static_cast

static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用
static_cast,但它不能用于两个不相关的类型进行转换
int main()
{double d = 12.34;int a = static_cast<int>(d);cout<<a<<endl;return 0;
}

2.2、reinterpret_cast

reinterpret_cast操作符通常为操作数的位模式提供较低层次的重新解释,用于将一种类型转换
为另一种不同的类型
int main()
{double d = 12.34;int a = static_cast<int>(d);cout << a << endl;// 这里使用static_cast会报错,应该使用reinterpret_cast//int *p = static_cast<int*>(a);int *p = reinterpret_cast<int*>(a);return 0;
}

2.3、const_cast

const_cast最常用的用途就是删除变量的const属性,方便赋值
int main()
{const int a = 2;//a = 3;int* p = const_cast<int*>(&a); // &a的类型:const int**p = 3;cout << a << endl; // 输出 2cout << *p << endl; // 输出 3return 0;
}

经过调试会发现a对应空间里的值其实已经通过const_cast去const属性后用p指针改为了3只是编译器优化认为a是const属性里面的值不会变,所以cout读取的是开始保存在寄存器里的备份2并非a对应空间里面目前存放的真值3;

添加voliate关键字解决:

int main()
{volatile const int a = 2;//voliate--隐含易变的意思,表明每次读取a的值需要从其空间取出,不用之前寄存器放的备份,保证读取正确的值;//a = 3;int* p = const_cast<int*>(&a); // &a的类型:const int**p = 3;cout << a << endl; // 输出 2cout << *p << endl; // 输出 3return 0;
}

volatile 关键字告诉编译器 变量a 是随时可能发生变化的,每次使用它的时候必须从内存中取出a的值,因而编译器生成的汇编代码会重新从 a 的地址处读取数据。这样看来,如果 a 是一个寄存器变量或者表示一个端口数据或者是多个线程的共享数据,就容易出错,所以说volatile 可以保证对特殊地址的稳定访问。

2.4、dynamic_cast

dynamic_cast用于将一个父类对象的指针/引用转换为子类对象的指针或引用(动态转换)
向上转型:子类对象指针/引用->父类指针/引用(不需要转换,赋值兼容规则)
向下转型:父类对象指针/引用->子类指针/引用(用dynamic_cast转型是安全的)
注意:
1. dynamic_cast只能用于父类含有虚函数的类
2. dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回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;
}
正确使用dynamic_cast防止崩溃
void fun(A* pa)
{B* ptr = dynamic_cast<B*>(pa);//使用dynamic_cast动态转换可以在下面的if中将规避掉不安全的内存访问情况;if (ptr){ptr->_b = 10;cout << ptr << endl;}else{cout << "转换失败" << endl;}
}int main()
{A a;B b;fun(&a);//不安全 fun中的A*是基类 a 对象传入,那么这个A* pa指针就没有权限访问派生类的_b成员(压根没有),dynamic_cast检测到直接返回nullptr了,通过后续if逻辑规避了报错;fun(&b);//安全 fun中的A*指针是派生类 b 对象传过去的,进行切片了但是下文数据还在,A* pa可以访问_b成员,dynamic_cast允许其进行转换;return 0;
}

注意

强制类型转换关闭或挂起了正常的类型检查,每次使用强制类型转换前,应该仔细考虑是
否还有其他不同的方法达到同一目的,如果非强制类型转换不可,则应限制强制转换值的作用域,以减少发生错误的机会。强烈建议: 避免使用强制类型转换

总结,即:

1、pa如果是指向父类对象(指针\引用),严格来说是不能转的,因为存在风险,访问时存在越界风险;
2、pa如果是指向子类对象(指针\引用),可以转换,是安全的(切片技术);
3、如果使用c的强制类型转换,那么这里是不安全的,无法识别上面的两种情况; (1是越界风险,2是安全的)
4、建议使用dynamic_cast,则他是安全的。如果是第2种情况可以转换成功,就算是第1种非法情况会认定转换失败,返回nullptr给指针,后面程序会if判断出来,不会崩溃;

http://www.ritt.cn/news/16738.html

相关文章:

  • 做网站子页智能建站abc
  • 装饰公司logo手机优化
  • 小区百货店网怎么做网站网络推广公司加盟
  • 个人做网站公司百度高级搜索引擎
  • 网站背景居中怎么做百度seo营销推广多少钱
  • 广州网站建设o2o手机app安装下载
  • 湖南企业网站定制百度域名购买
  • filetype doc 网站建设googleseo推广
  • 武汉微网站合肥最新消息今天
  • 云空间可以做网站网络营销成功的案例及其原因
  • 北苑做网站的公司360推广登录
  • 建材外贸网站建设百度热门
  • 学习网站导航谷歌chrome浏览器官方下载
  • 新疆建设云网站报备怎么用模板做网站
  • 如何做属于自己的网站产品推广方案要包含哪些内容
  • 服务器做网站网站seo设计方案案例
  • 购物网站销售管理十大销售管理软件排行榜
  • 企业商城建站搜索引擎网站推广如何优化
  • 做网站好还是做淘宝好服务推广软文
  • 用什么做网站怎样在百度上做广告
  • 做网站优化的协议书重庆关键词搜索排名
  • 帝国cms做视频网站山西seo排名
  • 网站的建设与应用口碑营销的前提及好处有哪些?
  • 数据库网站建设公司阿亮seo技术
  • 互联网项目发布平台漯河seo推广
  • 中小企业网站建设效果百度认证官网申请
  • 网站seo问题windows优化大师怎么样
  • 做商城网站建设哪家好百度pc网页版登录入口
  • 学校网站html模板百度指数大数据分享平台
  • 我要建个人网站收录网站有哪些