永发信息网

staticcast和强制转换的区别

答案:2  悬赏:80  手机版
解决时间 2021-02-25 11:01
  • 提问者网友:一抹荒凉废墟
  • 2021-02-24 22:26
staticcast和强制转换的区别
最佳答案
  • 五星知识达人网友:独钓一江月
  • 2021-02-24 23:17
前面的是C的风格,后面的是C++的风格(也是推荐使用的)。差别在于,static_cast更安全一些,对于指针操作的话,多了一些检查,例如无关指针就无法转换,父类指针向孩子指针,无法转换,常指针向非常指针无法转换,而前面的那个则是通吃,通常是下面四个转换的合体
reinterpret_cast
在低级编程以及硬件接口的开发过程中,常常需要将一个特定的物理内存地址赋值给一个指针。为此必须使用
reinterpret_cast操作符计算地址值。例子如下:

void *p;
// 将地址 0x5800FF 付给指针 p
p = reinterpret_cast< void* > (0x5800FF);

static_cast
通常这个运算符用来进行数值类型间的转化,比如int到float,也可以是自定义的某些数据类型的转化。这个操作符通常也可以用于类指针之间的转化,但是这个运算符在父类到子类的转化中没有做检查并不安全。

dynamic_cast
这个操作符专门用于指针或者引用操作,也可以进行point -> void 的操作。对父类和子类之间的指针装换这个操作具有类型检查的功能,比较安全!这里要注意的是,如果父类和子类之间没有虚函数(文档称为多态类),那么dynamic_cast不能执行转换,应采用static_cast来进行转换。
全部回答
  • 1楼网友:白昼之月
  • 2021-02-24 23:23
在sql server中,cast和convert函数都可用于类型转换,其功能是相同的, 只是语法不同. cast一般更容易使用,convert的优点是可以格式化日期和数值. 代码 select cast('123' as int) -- 123 select convert(int, '123') -- 123 select cast(123.4 as int) -- 123 select convert(int, 123.4) -- 123 select cast('123.4' as int) select convert(int, '123.4') -- conversion failed when converting the varchar value '123.4' to data type int. select cast('123.4' as decimal) -- 123 select convert(decimal, '123.4') -- 123 select cast('123.4' as decimal(9,2)) -- 123.40 select convert(decimal(9,2), '123.4') -- 123.40 declare @num money set @num = 1234.56 select convert(varchar(20), @num, 0) -- 1234.56 select convert(varchar(20), @num, 1) -- 1,234.56 select convert(varchar(20), @num, 2) -- 1234.5600
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯