所以我查看了一些Java代码并偶然发现:
List<? extends SomeObject> l;
Run Code Online (Sandbox Code Playgroud)
基本上这个列表接受SomeObject的某些对象 - SomeObject本身或其继承者.但是根据多态性,它的继承者也可以像SomeObject一样,所以这也可以:
List<SomeObject> l;
Run Code Online (Sandbox Code Playgroud)
那么,当第二个选项明确定义并且几乎相同时,为什么有人会使用第一个选项?
为什么此代码会产生运行时问题:
char stuff[100];
strcat(stuff,"hi ");
strcat(stuff,"there");
Run Code Online (Sandbox Code Playgroud)
但这不是吗?
char stuff[100];
strcpy(stuff,"hi ");
strcat(stuff,"there");
Run Code Online (Sandbox Code Playgroud) 我创建了一个String对象,它只包含一个char*字符串; 会员.我通过将成员从我的对象复制到参数的成员而重载operator +,两者都变成了char*变量.但由于某些原因,当我打印结果时,我得到了大约16个添加的giberish字符(转换过载是100%罚款).我把它缩小到char*sum = new char [length]就是问题了.我检查了strlen(sum),它显示等于22,当它应该是6个字母长.任何人都知道问题可能是什么?
String String::operator+(const String& rhs)
{
int length = strlen(string) + strlen(rhs.string);
char* sum = new char[length];
for(int i=0;i<strlen(string);i++)
sum[i] = string[i];
for(int i=0;i<strlen(rhs.string);i++)
sum[strlen(string) +i] = rhs.string[i];
String s(sum);
return s;
}
Run Code Online (Sandbox Code Playgroud)
编辑:现在胡言乱语已经消失了,但我仍然将=附加到我的结果中,例如:"1"+"2"+"3"现在是"1 = 2 = 3".这是null终止符解释错误的结果吗?
再次编辑:没关系,真的很懒,设置[length + 1] ='\ 0'而不是[length].再次感谢您的回答!