今天上课同学问了我一个很有意思的问题
std::string a;
sizeof(a) = ?
被问到这个问题,脑袋里的第一想法应该是根据a的字符串占用内存的大小。但上机之后大错特错,发现在编译器上无论如何修改a的值sizeof值都是28。这就很令人费解了?
于是百度求解。
网友解释道,string的实现在各库中可能有所不同,但是在同一库中相同一点是,无论你的string里放多长的字符串,它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配的,与sizeof()无关。
虽然解释的没有错误,但我仍不明白为什么应为string是动态分配而不能使用sizeof检测?每一刻字符串a不都是有值的吗,那a的内存不应该是字符个数+1吗?
继续求解百度(为什么不能用sizeof检测动态内存分配)终于揭开了神秘的面纱。
原来sizeof运算符是静态运算符,在编译时就给出了相应的结果,动态内存也就是运行时刻,是不能被sizeof检测的。这使我想到了为什么sizeof(i++)使用后为什么i没有自增。