假设我有一个带有整数的类,它应该总是带有简单的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吗?通过这样做,如果给定值超出最大值或低于零,我可以抛出异常.
很想听听一些建议.
给出以下代码:
#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.
现在我觉得更有意义..(字节)但是,还有什么用呢?
看完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) 给出以下代码:
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)
我的讲师说,在这种情况下都str2与str3将指向同一个对象,字符串"我不明白"会被插入到"字符串池".
我认为我得到了原因str2,str3现在将引用相同的对象,但为什么字符串"我不明白".在str3分配发生时进入字符串池?
例如,如果我这样做:
String s = "abcd";
Run Code Online (Sandbox Code Playgroud)
然后我知道现在字符串"abcd"将插入"字符串池",如果它还没有.
我很乐意得到解释.
在阅读英特尔手册时,我遇到了以下情况:
*在支持Intel 64体系结构的处理器上,IA32_SYSENTER_ESP字段和IA32_SYSENTER_EIP字段必须包含规范地址.
我不明白'规范地址'的含义......?
很想得到一个解释;)找不到任何东西@ google
谢谢
我注意到CR4寄存器中的PAE位在我的Linux(3.19)x86-64机器上打开了.PAE功能允许访问高达64gb的物理地址,但我不明白为什么在启用长模式时需要它.我已经查了一会儿,但没有找到任何令人满意的答案.
有什么建议?
鉴于以下语言:
L1 = { (ab)n | n ≥ 0 }
那是, L1 = { ε ab, abab, ababab, abababab, ... }
问题是要找到什么语言.L12
我的猜测是它等于.那是对的吗?如果是这样,我该如何证明呢?如果没有,为什么不呢?{ (ab)2n | n ≥ 0 }
谢谢!
math automata finite-automata regular-language formal-languages
给定L1和L2(不规则)上下文无关语言 - L1 U L2是否可能是常规的?
我知道这是可能的,但我无法找到一个显示的例子.很想获得一些帮助.
给出以下代码:
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. …
给出以下代码:
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,但我想这与我得到的第一件事情有关.
很想得到解释.