C++ GOTCHA 3

Last_Dodo 2002-01-23 11:27:57
1. Sometimes the following code seems to work just fine. Other times it crashes mysteriously. At other times the system seems sluggish. Why?
class Table
{
public:
Table(int sz);
...
private:
int *memory;
int size;
...
};

Table::Table(int sz):size(sz),memory(new int[size])
{
...
}

int main()
{
Table t(128);
return 0;
}

2. which f is called in the code below, and why?
class C
{
public:
int f(char *) { return 3; }
float f(int *) { return 3.14159; }
};
int main()
{
C x;
float g;
g = x.f(0); // what happens?
cout << g << endl;
return 0;
}

3. Explain the compiler error message generated by this code:
struct S {
int &ref;
S();
};
int main()
{
S x,y;
x = y; // illegal, why?
return 0;
}
...全文
72 点赞 收藏 8
写回复
8 条回复
thisisxutao 2002年01月24日
虚心学习....
回复 点赞
vcmfc 2002年01月24日
感谢albert_ywy(北方的狼),不然回复不了第4个贴子。
回复 点赞
vcmfc 2002年01月24日


3.你的S::&ref未进行初始化,你应该知道,C++的引用一定义就要进行初始化。所以编译器一定会提醒你这个方面的错误信息。

回复 点赞
albert_ywy 2002年01月24日

插一腿

回复 点赞
vcmfc 2002年01月24日

2.编译错误,因为产生ling模两可的状态,编译器无法决定。


回复 点赞
vcmfc 2002年01月24日
错误更正:

]),但系统实际上还是先memory(new int[size]),因为你的成员在int *memory在int size顺序之前,而此时你的size的值又未确定,所,有时new出一个相当大的memory,因此有时相当不稳定的原因。

回复 点赞
vcmfc 2002年01月24日
1.有一种可能:由于你的类的声明顺序与member init list不一样,所以问题就可来了,如下解释:
由于你的类的成员对象顺序是int *memory;->int size;而你的member init list是:size(sz),memory(new int[size]),但系统实际上还是还memory(new int[size]),些时你的size的值未确定,因此,有时new以一个相当大的memory,所以有时相当不稳定的原因。

两种改法:size(sz),memory(new int[sz]);

在使用权member init list请遵守按成员对象的顺序来进行初始,你这个就是违反了这一条。

回复 点赞
老熊宝宝 2002年01月23日
还要看看。
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告