C++ 的 sizeof 是怎么实现的
2个回答
2017-02-14
展开全部
以前在远标学过sizeof 是一个运算符,编译期求一个类型 sizeof(int) 或是一个表达式 size(++i) 的类型的长度!
重点: (1) 运算符,非函数; (2) 编译期求值,所以 sizeof 的结果是常量; (3) 求的是类型的长度,表达式是不需要求值的!
sizeof(4) == sizeof(i) == sizeof(++i) == 4 ,为什么是 4! 因为(某编译器)一开始就规定的 int 是 4 个字节呀,混蛋!
补充:(4) c/c++ 标识符 先声明后使用 + 静态类型 意味着: 任何一个表达式 (*p++)[0]->a 本身从声明和解析上就能知道类型,不需要计算出结果才知道呀,哎哟喂!!
所以回到题目的问题:
第2个问题: sizeof(++i) 中 i 值为什么没有 +1 , 表达式都没有执行! sizeof(++i) 和 sizeof(i) 和 sizeof(int) 没有区别!
第1个问题: sizeof("123456789") 为什么是 10 ? 因为 "123456789" 的类型是 const char[10] !(注意 "123456789"后面有一个默默无闻的 '\0' 字符) 这是一个 10 个字符的数组类型, sizeof(const char[10]) == sizeof(char)*10,所以是10 !至于为什么 "123456789" 的类型是 const char[10], 那不是 sizeof 的问题,是 c/c++ 类型系统就是这么规定的!
sizeof("12345689"+1) == 10 ???!!!! 如果结果是 10, 只能说编译器有问题吧 !"123456789"+1 的类型是 char*, 所以 sizeof("123456789"+1) == sizeof(char*) == sizeof(int*) == 4 or 8 !!!(10 不能说不对, 但是感觉略奇葩,就像 c 中 sizeof(char) 其实可以不等于 1, 一个字节可以不是 8 bit 一样! )
这里就不得不提 c/c++ 中的类型转换, 除了 sizeof 和 & 一个数组 T[N] 之外譬如 sizeof(char[5]), 其他时候数组类型 T[N] 都隐式转换为 T* , so, "123456789"+1 的类型是 char* !
c/c++ 的类型以及类型转换这里省略一篇作文的长度,%>_<%
重点: (1) 运算符,非函数; (2) 编译期求值,所以 sizeof 的结果是常量; (3) 求的是类型的长度,表达式是不需要求值的!
sizeof(4) == sizeof(i) == sizeof(++i) == 4 ,为什么是 4! 因为(某编译器)一开始就规定的 int 是 4 个字节呀,混蛋!
补充:(4) c/c++ 标识符 先声明后使用 + 静态类型 意味着: 任何一个表达式 (*p++)[0]->a 本身从声明和解析上就能知道类型,不需要计算出结果才知道呀,哎哟喂!!
所以回到题目的问题:
第2个问题: sizeof(++i) 中 i 值为什么没有 +1 , 表达式都没有执行! sizeof(++i) 和 sizeof(i) 和 sizeof(int) 没有区别!
第1个问题: sizeof("123456789") 为什么是 10 ? 因为 "123456789" 的类型是 const char[10] !(注意 "123456789"后面有一个默默无闻的 '\0' 字符) 这是一个 10 个字符的数组类型, sizeof(const char[10]) == sizeof(char)*10,所以是10 !至于为什么 "123456789" 的类型是 const char[10], 那不是 sizeof 的问题,是 c/c++ 类型系统就是这么规定的!
sizeof("12345689"+1) == 10 ???!!!! 如果结果是 10, 只能说编译器有问题吧 !"123456789"+1 的类型是 char*, 所以 sizeof("123456789"+1) == sizeof(char*) == sizeof(int*) == 4 or 8 !!!(10 不能说不对, 但是感觉略奇葩,就像 c 中 sizeof(char) 其实可以不等于 1, 一个字节可以不是 8 bit 一样! )
这里就不得不提 c/c++ 中的类型转换, 除了 sizeof 和 & 一个数组 T[N] 之外譬如 sizeof(char[5]), 其他时候数组类型 T[N] 都隐式转换为 T* , so, "123456789"+1 的类型是 char* !
c/c++ 的类型以及类型转换这里省略一篇作文的长度,%>_<%
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询