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

可以做项目的网站专业制作网站的公司哪家好

可以做项目的网站,专业制作网站的公司哪家好,一个人可以做多少网站,做食品的采购员常用网站C具名转型的功能和用途 1. static_cast功能用途示例 2. dynamic_cast功能用途示例 3. const_cast功能用途示例 4. reinterpret_cast功能用途示例 对比总结最佳实践 在 C 中,具名转型(Named Casts) 是类型安全的显式类型转换操作符&#xff0c…

C++具名转型的功能和用途

    • 1. static_cast
      • 功能
      • 用途
      • 示例
    • 2. dynamic_cast
      • 功能
      • 用途
      • 示例
    • 3. const_cast
      • 功能
      • 用途
      • 示例
    • 4. reinterpret_cast
      • 功能
      • 用途
      • 示例
    • 对比总结
    • 最佳实践

在 C++ 中,具名转型(Named Casts) 是类型安全的显式类型转换操作符,相比传统的 C 风格强制转换,具名转型具有更明确的语义和编译器检查。C++ 提供四种标准具名转型:

1. static_cast

功能

  • 用于编译时已知类型关系的转换
  • 可执行基本类型转换、父子类指针/引用转换(无动态类型检查)
  • 不能移除 const/volatile 限定符

用途

  • 基本数值类型转换
  • 类层次中的向上转换(子类→基类)
  • 隐式转换的显式写法(如 void* → 其他指针)

示例

// 基本类型转换
double d = 3.14;
int i = static_cast<int>(d);  // i = 3// 类层次向上转换
class Base {};
class Derived : public Base {};
Derived* pd = new Derived;
Base* pb = static_cast<Base*>(pd);  // 安全向上转换// void* 转换
int x = 10;
void* pv = static_cast<void*>(&x);
int* pi = static_cast<int*>(pv);

2. dynamic_cast

功能

  • 用于运行时类型检查的类层次转换(需要 RTTI 支持)

  • 主要用于向下转换(基类→子类)

  • 只能用于多态类型(基类必须有虚函数)

用途

  • 安全地将基类指针/引用转换为派生类指针/引用

  • 转换失败时返回 nullptr(指针)或抛出异常(引用)

示例

class Animal { public: virtual ~Animal() {} };
class Dog : public Animal { public: void bark() {} };Animal* pa = new Dog;// 向下转换(安全)
Dog* pd = dynamic_cast<Dog*>(pa);
if (pd) {pd->bark();  // 转换成功
}// 处理交叉转换(cross cast)
class Cat : public Animal {};
Animal* pa2 = new Cat;
Dog* pd2 = dynamic_cast<Dog*>(pa2);  // 返回 nullptr

3. const_cast

功能

  • 移除或添加 const/volatile 限定符

  • 不能改变实际类型,只能改变访问权限

用途

  • 修改第三方库中未正确声明为 const 的 API

  • 临时去除 const 以兼容旧代码(需谨慎)

示例


// 合法使用:去除 const 访问非 const 对象
int value = 42;
const int* cp = &value;
int* p = const_cast<int*>(cp);  // 合法
*p = 100;  // 安全:原对象本身不是 const// 危险操作:修改真正的 const 对象
const int ci = 50;
int* pci = const_cast<int*>(&ci);
*pci = 60;  // 未定义行为(UB)

4. reinterpret_cast

功能

  • 低级别的位模式重新解释

  • 不进行任何类型检查或转换

  • 可能导致未定义行为(UB)

用途

  • 指针与整数之间的转换

  • 不相关指针类型之间的转换(如 float* → int*)

示例


// 指针转整数(平台相关)
int x = 42;
uintptr_t addr = reinterpret_cast<uintptr_t>(&x);// 不同类型指针转换
float f = 3.14f;
int* pi = reinterpret_cast<int*>(&f);  // 重新解释二进制位// 危险:函数指针转换
typedef void (*FuncPtr)();
FuncPtr fp = reinterpret_cast<FuncPtr>(&x);  // 调用导致 UB

对比总结

转型操作符使用场景安全性运行时开销
static_cast明确的类型转换编译时检查
dynamic_cast多态类层次的安全向下转换运行时检查
const_cast修改 const/volatile 属性需人工保证
r einterpret_cast低级二进制重新解释 极不安全

最佳实践

  • 优先使用 static_cast,避免 C 风格强制转换

  • 慎用 const_cast:确保原对象不是真正的常量

  • 限制 reinterpret_cast:仅在硬件操作或系统编程时使用

  • 用 dynamic_cast 替代向下转型:结合 if 检查结果

// 安全转型模板
template <typename To, typename From>
To safe_cast(From from) {static_assert(std::is_polymorphic_v<From>, "Need polymorphic type");To to = dynamic_cast<To>(from);if (!to) throw std::bad_cast();return to;
}
http://www.dtcms.com/wzjs/203601.html

相关文章:

  • 网站做推广需要到工信部备案吗软件测试培训班多少钱
  • html做网站收藏按钮windows优化大师是哪个公司的
  • 普陀微信网站建设网站大全
  • 网站书店架构书怎么做深圳经济最新新闻
  • 枝江企业网站页面设计
  • 手机网站建设制作公司seo标题优化的心得总结
  • 如何制作网站机器人浏览器网址
  • 组建网站怎样建网站
  • WordPress登录插件哪个好seo最强
  • 如何做网站地图视频企业宣传片制作
  • python做网站稳定吗下载微信
  • 网站策划书范文模板seo与sem的区别和联系
  • 如何提升网站访问速度网址安全中心检测
  • 做3个网站需要多大的服务器汕头自动seo
  • 深圳网站建设的客户在哪里惠州大亚湾经济技术开发区
  • 做旅游网站平台合作入驻网络舆情优化公司
  • 2017年做网站多少钱宁波网站优化
  • 网站自动售卡怎么做推广公司运营模式
  • 济南市疫情最新消息今天seo快速提升排名
  • 网站流量图怎么做的网络营销推广方式包括
  • 党政机关网站建设指南网站seo优化网站
  • 南宁做棋牌网站的公司百度seo排名优化系统
  • wordpress 主机服务主题四川网站seo
  • 青岛企业网站制作公司西安百度竞价外包
  • 谷歌外贸网站seo怎么做查排名网站
  • 备案名称和网站logo不一致网站源码建站
  • 做欧洲电商看哪个网站沈阳百度seo
  • 集团网站建设多少钱福州百度关键词优化
  • 网站建设和维护待遇销售平台
  • 网站恶意点击怎样做seo搜索引擎优化