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

石家庄建网站品牌营销推广方案

石家庄建网站,品牌营销推广方案,厦门网站建设工作室,做o2o网站需要多少钱可能有些朋友看见这个标题第一反应是嵌入式的某些内存中,0地址也是可以被正常访问的,所以对0地址的解引用不会发生错误,但我要说的情况不是这个,而是指一个真正的空指针,不仅是c/c中的0,(void*)0,NULL,还有nullptr,一个真正的空指针. 在c语言中,想获得某结构体的成员变量相对偏…

可能有些朋友看见这个标题第一反应是嵌入式的某些内存中,0地址也是可以被正常访问的,所以对0地址的解引用不会发生错误,但我要说的情况不是这个,而是指一个真正的空指针,不仅是c/c++中的0,(void*)0,NULL,还有nullptr,一个真正的空指针.

在c语言中,想获得某结构体的成员变量相对偏移,可以使用offsetof宏,其实现可能是:

#define offsetof(s,m)   (size_t)&(((s*)0)->m)

可以发现:

  1. 先将0转换为指向s的指针
  2. 使用->解引用,获取到m变量
  3. 使用&取地址,获得一个指向m的指针
  4. 将指针转换为size_t,即为m的偏移

从这个例子可以发现,对于0地址,发生了一次"解引用",然而并没有"segmentation fault",为什么呢?其实呢,这个解引用被优化了,编译器看到这句时,并没有发生实际的解引用而获得到了m的地址,是一个真正的编译器开洞才能实现的功能.(如有错误,诚请斧正)

你可以这样定义自己的offsetof

#undef offsetof
#define offsetof(s,m)	(size_t)&(((s*)NULL)->m)
// 或
#undef offsetof
#define offsetof(s,m)	(size_t)&(((s*)nullptr)->m)

你会发现,也是可以正常工作的,至少gcc的c++14之前是可以的,gcc的c++14后,
对于non-POD类型,这个宏将可能可能导致未定义的问题.注意,在cppreference中说的是从c++11开始,对于non-POD类型使用offsetof宏将导致未定义行为.
no-invalid-offsetof

gcc中的offsetof是这样定义的:Support for offsetof

#define offsetof(type, member) __builtin_offsetof (type, member)

可以发现,果然是内置的编译器开洞实现的功能.

综上,解引用一个空指针,不一定会导致段错误.
在c++中,想获得类或结构体成员的偏移量,不要使用offsetof,而应该使用&ClassName::MembersName,例如&test::str,就获取到了str的偏移

#include <vector>
#include <iostream>
class test{
public:float float_number = 3.14;int int_number = 456;std::string str = "789";
};template<typename T>
void print_member(const test* class_ptr,T test::* member_offset){printf("offset of member is %p,content is ",member_offset);std::cout << class_ptr->*member_offset << std::endl;
}int main(){test t;print_member(&t,&test::int_number);print_member(&t,&test::str);
}
/*
output:
offset of member is 0x4,content is 456
offset of member is 0x8,content is 789
*/
http://www.zhongyajixie.com/news/32710.html

相关文章:

  • 注册 网站开发 公司网络营销推广方案策划书
  • 哪些网站可以接设计的单子做百度统计数据
  • 中小企业网站建设价位百度手机网页版
  • 做网站备案成功之后改怎么操作北京网站优化怎么样
  • 贵阳做网站的湛江seo推广公司
  • 没有注册公司可以建网站吗乐天seo视频教程
  • 贝斯特专业网站西安网站seo
  • 做网站成功河南关键词排名顾问
  • 深圳横岗网站建设网站怎么营销推广
  • dw做的网站怎么让别人看到百度指数查询官方下载
  • asp做的静态网站卡不卡2021年经典营销案例
  • 建网站做日租房阿里云建站费用
  • 网站模板asp旺道智能seo系统
  • 南京市网站热搜榜排名前十
  • seo资源网站排名营销推广计划
  • 做旅游网站绍兴百度seo
  • 沈阳哪家公司网站做的好seo推广系统排名榜
  • 淘宝美工培训班深圳seo公司排名
  • 深圳网站建设软件开发公司哪家好100个商业经典案例
  • 个人网站设计师百度热度
  • 苏州市建设局网站首页怎样做网络推广效果好
  • 投资建设网站首页长尾关键词有哪些
  • 网站建设技术文档宁波关键词排名优化
  • 网站菜单框架网络推广合同
  • 华梦服饰网站建设中推广公司是做什么的
  • 传统小型企业做网站的好处个人免费网上注册公司
  • 济南网站建设认可搜点网络搜索广告和信息流广告区别
  • 网站开发 网站设计模板网站哪个好
  • 深圳网站建设定制营销策划案
  • 网站死链怎么办常州网站推广排名