小编Rou*_*uki的帖子

使用unsigned int与检查是否为负

假设我有一个带有整数的类,它应该总是带有简单的C'tor:

class A {
    unsigned int x;
    public:
    A(unsigned int X) : x(X) {}
};
Run Code Online (Sandbox Code Playgroud)

并且假设有人意外地创建了具有该值的A对象-5.当然,这是无效的,并且X将获得非常大的价值,因为MSB现在不代表数字符号.问题是,现在我无法真正检查数字是否为负数或无效(可能是按位?).

我应该避免unsigned使用平原int吗?通过这样做,如果给定值超出最大值或低于零,我可以抛出异常.

很想听听一些建议.

c++

24
推荐指数
2
解决办法
3888
查看次数

为什么通过指针静态访问类数据成员返回1?

给出以下代码:

#include <iostream>

using std::cout;

class A {
    public:
        virtual ~A() {}
        int x,y,z;
};

int main (void)
{
    std::cout<<&A::x;
    std::cout<<&A::y;
    std::cout<<&A::z;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

111

输出是什么意思?为什么是1?是否有任何理由通过指针访问类成员(没有创建对象)?

编辑 - 使用:

printf("%p",&A::x);
printf("%p",&A::y);
printf("%p",&A::z);
Run Code Online (Sandbox Code Playgroud)

打印:4,8和C.

现在我觉得更有意义..(字节)但是,还有什么用呢?

c++

20
推荐指数
1
解决办法
449
查看次数

关于ostream类和运算符的误解<<

看完ostream::operator <<c ++参考后,

我注意到以下声明:

ostream& operator<< (bool val);
ostream& operator<< (short val);
ostream& operator<< (unsigned short val);
ostream& operator<< (int val);
ostream& operator<< (unsigned int val);
ostream& operator<< (long val);
ostream& operator<< (unsigned long val);
ostream& operator<< (float val);
ostream& operator<< (double val);
ostream& operator<< (long double val);
ostream& operator<< (void* val);
ostream& operator<< (streambuf* sb );
ostream& operator<< (ostream& (*pf)(ostream&));
ostream& operator<< (ios& (*pf)(ios&));
ostream& operator<< (ios_base& (*pf)(ios_base&));
Run Code Online (Sandbox Code Playgroud)

但后来我发现还有以下声明:

ostream& operator<< (ostream& os, char c);
ostream& operator<< …
Run Code Online (Sandbox Code Playgroud)

c++ iostream

10
推荐指数
1
解决办法
992
查看次数

StringBuffer和String池

给出以下代码:

StringBuffer str2 = new StringBuffer(" I don't");
    StringBuffer str3 = str2.append(" get it.");
    if (str2 == str3)
    {
        System.out.println("Equal");
    }
Run Code Online (Sandbox Code Playgroud)

我的讲师说,在这种情况下都str2str3将指向同一个对象,字符串"我不明白"会被插入到"字符串池".

我认为我得到了原因str2,str3现在将引用相同的对象,但为什么字符串"我不明白".在str3分配发生时进入字符串池?

例如,如果我这样做:

 String s = "abcd";
Run Code Online (Sandbox Code Playgroud)

然后我知道现在字符串"abcd"将插入"字符串池",如果它还没有.

我很乐意得到解释.

java

7
推荐指数
1
解决办法
1875
查看次数

典型地址

在阅读英特尔手册时,我遇到了以下情况:

*在支持Intel 64体系结构的处理器上,IA32_SYSENTER_ESP字段和IA32_SYSENTER_EIP字段必须包含规范地址.

我不明白'规范地址'的含义......?

很想得到一个解释;)找不到任何东西@ google

谢谢

assembly x86-64 intel virtual-address-space memory-address

7
推荐指数
3
解决办法
1687
查看次数

x86-64位处理器中的PAE - Linux内核

我注意到CR4寄存器中的PAE位在我的Linux(3.19)x86-64机器上打开了.PAE功能允许访问高达64gb的物理地址,但我不明白为什么在启用长模式时需要它.我已经查了一会儿,但没有找到任何令人满意的答案.

有什么建议?

paging x86 operating-system x86-64 linux-kernel

6
推荐指数
1
解决办法
311
查看次数

这种语言与自身的串联是什么?

鉴于以下语言:

L1 = { (ab)n | n ≥ 0 }

那是, L1 = { ε ab, abab, ababab, abababab, ... }

问题是要找到什么语言.L12

我的猜测是它等于.那是对的吗?如果是这样,我该如何证明呢?如果没有,为什么不呢?{ (ab)2n | n ≥ 0 }

谢谢!

math automata finite-automata regular-language formal-languages

5
推荐指数
1
解决办法
916
查看次数

两个(不规则)上下文无关语言的联合会产生常规语言吗?

给定L1和L2(不规则)上下文无关语言 - L1 U L2是否可能是常规的?

我知道这是可能的,但我无法找到一个显示的例子.很想获得一些帮助.

regular-language formal-languages context-free-language

4
推荐指数
1
解决办法
6682
查看次数

多重继承和指针实现

给出以下代码:

namespace Example1 {

class A {
public:
    A() {}
    virtual ~A() {}
private:
    float data_A;
};

class B {
public:
    B() {}
    virtual ~B() {}
protected:
    float data_B;
};

class Derived : public A, public B {
public:
    Derived() {}
    virtual ~Derived() {}
protected:
    float data_Derived;
};

}

int main (void)
{
using namespace Example1;
B* pb = new Derived;
delete pb;
}
Run Code Online (Sandbox Code Playgroud)

pb现在应该指向对象的B一部分Derived.但派生对象也派生自A,意味着它具有A子对象..并且该A子对象应该是"第一",因为Derived该类首先继承自A. …

c++

3
推荐指数
1
解决办法
1063
查看次数

字符串分配和输出

给出以下代码:

String str1 = new String("Hello");
String str2 = str1;
String str3 = new String(str1);
String str4 = str3;
str4 += " World ";
if (str3==str4)
     System.out.println(“one”);
if (str3.equals(str4))
     System.out.println(“two”);
if (str1==str2)
     System.out.println(“three”); 
if (str3.equals(str2))
     System.out.println(“four”);
Run Code Online (Sandbox Code Playgroud)

输出为:三和四

我不明白..我们刚刚做了str3 == str4.怎么他们不能引用同一个对象..?str3 == str4似乎是假的,我不明白为什么.另外,str3.equals(str4)也返回false,但我想这与我得到的第一件事情有关.

很想得到解释.

java

2
推荐指数
1
解决办法
104
查看次数