【发布时间】:2011-06-12 11:31:42
【问题描述】:
这是我的 C++ 代码:
class base
{
public:
int bval;
base(){ bval=0;}
void give() { std::cout<<bval<<":"; }
};
void SomeFunc(base *arr,int size)
{
for(int i=0; i<size; i++,arr++)
std::cout<<arr->bval;
std::cout<<"\n";
for(int i=0; i<size; i++,arr++)
arr->give();
std::cout<<"\n";
}
void test_case4()
{
base BaseArr[5];
SomeFunc(BaseArr,6);
}
我得到以下代码的输出:
000003379188
0:-1079809464:134515567:134515888:0:-1079809336:
为什么第二行和第一行不一样,为什么我在SomeFunc 中得到第 6 个循环的输出,而那个地方还没有分配,我的意思是没有代码给 give() 函数执行。
我还知道,对象上的 sizeof 运算符仅给出其数据元素的大小,而不给出对象包含的函数。那么如果函数不在对象内存空间内,那么它们存储在哪里?
编辑:
我故意将 arr 第 6 次递增,只是为了检查在执行不在第 6 位的 give() 函数时会发生什么。
查看对 Cem Kalyoncu 回复的评论。 也请回答我问题的第一部分。
【问题讨论】: