小编Hot*_*ead的帖子

Java中的`*this = rhs`?

我来自C++世界,我找不到以下的Java替代方案(如果有的话):

struct SomeStruct
{
    SomeStruct(){}
    SomeStruct(const SomeStruct& rhs)
    {
        *this = rhs;
    }
};
Run Code Online (Sandbox Code Playgroud)

我需要这个的原因是我有一个现有对象的缓存,所以我不想创建另一个实例,只是为了'克隆'现有的实例,如下所示:

public class SomeObject
{
    private static Hashtable _objects;
    SomeObject()
    {
        SomeObject obj = _objects.get(some_key);
        if (obj != null) {
            // *this = obj;
            // instead of: 
            // this.something = obj.something;
            // this.something1 = obj.something1;
            // this.something2 = obj.something2;
            // a zillion fields....
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

编辑:

对不起,我混淆了一些事情(仍然需要学习Java和C++).

谢谢

c++ java

12
推荐指数
2
解决办法
1100
查看次数

删除char数组时未定义的行为trought void*

以下是否会产生未定义的行为:

void * something = NULL;
char * buffer = new char[10];

something = buffer;
buffer = NULL;

delete [] something; // undefined??
Run Code Online (Sandbox Code Playgroud)

我首先需要投somethingchar *

c++ memory-management undefined delete-operator

6
推荐指数
2
解决办法
695
查看次数

每个片段的编译器行为有何不同?

请考虑以下代码:

1.

uint16 a = 0x0001;

if(a < 0x0002)
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

2.

uint16 a = 0x0001;

if(a < uint16(0x0002))
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

3.

uint16 a = 0x0001;

if(a < static_cast<uint16>(0x0002))
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

4.

uint16 a = 0x0001;
uint16 b = 0x0002;

if(a < b)
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

backgorund中的编译器做了什么以及上面测试的最佳(和正确)方法是什么?

抱歉,但我找不到更好的标题:)

编辑:

值0x0001和0x0002仅是示例.可以改为任何2字节值.

先感谢您!

c++ comparison

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

重载operator <<以工作为字符串

在以下代码中:

 using namespace std;

 //ostream& operator<< (ostream& out,const string & str)
 //{    
 //  out << str.c_str();    
 //  return out; 
 //}

 int _tmain(int argc, _TCHAR* argv[])
 {

     ofstream file("file.out");  

     vector<string> test(2); 

     test[0] = "str1"; 
     test[1] = "str2";
     ostream_iterator<string> sIt(file);

     copy(test.begin(), test.end(), sIt);

     file.close();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

什么是重载的正确方法operator <<,使 copy(test.begin(), test.end(), sIt);工作.

我错过了什么?

编辑:我只是愚蠢......忘了包含"字符串"标题

谢谢!

c++ string file-io vector operator-overloading

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