我试着乘以三个数字,但我得到一个奇怪的结果.为什么我得到如此不同的结果?
unsigned int a = 7;
unsigned int b = 8;
double d1 = -2 * a * b;
double d2 = -2 * (double) a * (double) b;
double d3 = -2 * ( a * b );
// outputs:
// d1 = 4294967184.000000
// d2 = -112.000000
// d3 = 4294967184.000000
Run Code Online (Sandbox Code Playgroud) 我有两节课:
class ClassA {
public:
ClassB *classB;
int i = 100;
}
// and:
class ClassB {
public:
void longProcess();
}
Run Code Online (Sandbox Code Playgroud)
我从ClassB()运行一个空格:
ClassA classA = new ClassA();
classA->i = 100;
classA->classB = new ClassB();
classB->longProcess(); // it's a long process!
// but when it will finish - I need to get the "i" variable from ClassA
Run Code Online (Sandbox Code Playgroud)
如何从方法中获取"int i"变量:longProcess()?实际上,我需要在另一个线程中运行这个长代码,这就是为什么我需要在longProcess()完成其工作时从ClassB中检索"i"变量.有什么建议?
更新:我尝试编写一些代码来保存指向父类的指针
// - = - = - = - = - = - = - = - = - = - = …
我在代码中使用了额外的括号.我想当在局部变量作用域结束后应该调用析构函数但它不能像这样工作:
class TestClass {
public:
TestClass() {
printf( "TestClass()\n" );
}
~TestClass() {
printf( "~TestClass()\n" );
}
};
int main() {
int a, b, c;
{
TestClass *test = new TestClass();
}
}
Run Code Online (Sandbox Code Playgroud)
它输出:
识别TestClass()
所以它不会调用TestClass的析构函数,但为什么呢?如果我手动调用它(删除测试),它会调用析构函数.但是为什么它不会在第一种情况下调用析构函数呢?
我有以下代码的问题.我在Xcode(OS X)中使用它.
[删除了我对该代码的第一次尝试]
如何输入reset std :: cin?我尝试输入另一个值,但我不能,因为std :: cin似乎在我错误的值之后不再工作了.
UPD2 在我的第二次尝试中,我使用此代码:
for ( unsigned char i = 0; i < 5; i++ ) {
int value = 0;
std::cout << "\n>> Enter \"value\": ";
std::cin >> value;
if ( std::cin.fail() ) {
std::cin.clear();
std::cin.ignore();
std::cout << "Error: It's not integer value!\n";
} else {
std::cout << "The value format is ok!\n";
}
std::cout << "value = " << value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
这里我只是在一个循环中输入5个值.每次我检查错误.当我设置错误的值("asdf")时,std :: cin变得疯狂并且不再起作用.我得到这个输出:
>> Enter "value": 4
The …Run Code Online (Sandbox Code Playgroud) 我的任务是在帧中绘制一个精灵100次.例如,我需要绘制一个由精灵"sprite.png"组成的行.我是这样做的:
CCSprite *spriteArr[ 100 ];
for ( unsigned int i = 0; i < 100; i++ ) {
spriteArr[ i ] = new cocos2d::CCSprite();
spriteArr[ i ]->initWithFile( "sprite.png" );
spriteArr[ i ]->setPosition( cocos2d::CCPoint( i * 10, 100 ) );
this->addChild( spriteArr[ i ] );
}
Run Code Online (Sandbox Code Playgroud)
这就是问题所在.我只为一个精灵分配内存100次,但我不知道如何以不同的方式做.我该如何优化它?在Cocos2d中是否有一种方法可以使用坐标(x和y)绘制精灵但不为每个相同的精灵分配内存?
我使用一个简单的代码:
std::vector < float > arr = { 3.42f, 6.45f, 53.43f };
float *elemPtr;
elemPtr = &arr[ 0 ];
std::cout << "elemPtr = " << *elemPtr << std::endl;
arr.push_back( 7.0f );
std::cout << "elemPtr = " << *elemPtr << std::endl;
Run Code Online (Sandbox Code Playgroud)
该代码产生以下输出:
elemPtr = 3.42
elemPtr = -6.25982e+18
Run Code Online (Sandbox Code Playgroud)
为什么在push_back之后会发生这种情况?我没有删除向量的第一个元素.它为什么会这样?
我使用Clang编译器(Xcode).
我试着运行以下代码:
std::map < std::string, std::string > m;
m[ "one" ] = "0";
m[ "two" ] = "1";
m[ "three" ] = "2";
m[ "four" ] = "3";
auto it = m.begin();
std::cout << it->first << "\n";
Run Code Online (Sandbox Code Playgroud)
输出是:"four".但为什么从头到尾呢?我被期待了"one"!
我有一个指向对象数组的指针.看起来像:
MyClass *myClass[ 10 ];
myClass[ 0 ] = new MyClass(); // init for each of myClass[0..9]
myClass[ 0 ]->field1 = "hello";
Run Code Online (Sandbox Code Playgroud)
如何通过引用将"myClass"传递给函数?我尝试了几个案例,但它没有用.
class MyClass {
private:
unsigned int currentTimeMS;
public:
void update() {
currentTimeMS = getTimeMS();
// ...
}
};
class MyClass {
public:
void update() {
unsigned int currentTimeMS = getTimeMS();
// ...
}
};
Run Code Online (Sandbox Code Playgroud)
update()调用主游戏循环,所以在第二种情况下我们得到了很多分配操作(unsigned int currentTimeMS).在第一种情况下,我们只获得一个分配并使用之前分配的变量.哪个代码更好用,为什么?