C++;Java中的代码含义与转换
我有一本C++C++;Java中的代码含义与转换,java,c++,Java,C++,我有一本C++ char *s, mask; // Some code If(*s == 0){ //Some more code} If(*s & mask){ //Some code} 在Java中,我可以这样写吗 byte s,mask; //Some code If(s == (byte)0x0){ //Some more code} If((s & mask) != (byte)0x0){ //Some Code} java代码正确吗> P>未定义的未
char *s, mask;
// Some code
If(*s == 0){ //Some more code}
If(*s & mask){ //Some code}
在Java中,我可以这样写吗
byte s,mask;
//Some code
If(s == (byte)0x0){ //Some more code}
If((s & mask) != (byte)0x0){ //Some Code}
java代码正确吗在C++中,P>> P>未定义的未初始化指针的默认值。您必须显式地初始化它。在java中,类型<代码>字节的默认值是“代码> 0”/Cube >,除非它是局部变量,在这种情况下,您也必须显式初始化它。C++中的< P> >此代码是未定义的行为:
If(*s == 0) // 's' is not initialized
我认为在Java中,eclipse类型的编辑器可能会抱怨未初始化的
s
。在读取变量之前,最好先用任何一种语言初始化变量。最有可能的翻译(这看起来像是某种低级解析;对于二进制字节数组的扫描,应该使用“unsigned char”):
字节[]s;//有某种价值
对于(int i=0;i,C++代码是否真的说了<代码>(*s= 0)< /> >,还是它确实说<代码>(s=0)< /代码>?在第一个过程中,你检查“代码> s < /C> >什么是0,而在第二个,你检查<代码> s <代码>是否为空指针。这是两个非常不同的事情。
java没有指针,所以这个代码不能直接翻译成java。
这应该相当于C++代码:
byte s[], mask;
if (s[0] == 0) { /*Some more code*/ }
if ((s[0] & mask) != 0) {/*Some code*/}
<>代码>代码> >代码>在C++代码中可能会得到<强>递增< /强>,在这种情况下,java示例中的代码> s(0)应该更改为<代码> s [POS ] < /C> >:
byte s[], mask;
// initialize s[] to store enough bytes
int pos;
if (s[pos = 0] == 0) { pos++; /* Some code */ }
if ((s[pos] & mask) != 0) {/*Some code*/}
但只对成员变量;局部变量没有初始化为默认值,必须显式初始化某个值,如果没有,则会有编译错误。你正在编写字符集转换吗?<代码> <代码>:是的,我们在C++和java.初始化s变量,在*s==0。* s点指向对象或什么?它是什么?检查对象是否为空或wat?*s
是s
指向的对象-它检查s
指向的对象是否为0。不涉及任何对象,s
是指向char
的指针。它检查s
指向的char
是否为0。在C中,字符串通常为零项因此,这看起来像是检查一个字符串是否为空。这就表明,没有显示的代码几乎肯定会增加有趣的猜测。即使如此,这也是一个不错的C++到java映射。假设“代码> char *< /COD>是一个字节数组。我将更新答案,以反映潜在的增量<代码> s>代码> MMM……在索引器旁边,在“某些代码”的开头增加一个post;我认为我的版本看起来更“规范”(即使pos++在正确的位置,你也会在我的for循环中编写continue
)@sehe,当然,不管怎样。我们甚至不知道OP想要什么shehe——很有趣,它是这样工作的:)。我通常不提这些问题。我的目标不是增加混乱。
byte s[], mask;
// initialize s[] to store enough bytes
int pos;
if (s[pos = 0] == 0) { pos++; /* Some code */ }
if ((s[pos] & mask) != 0) {/*Some code*/}