我有一个函数get
,它返回对象的引用。此函数由另一个函数get2
调用,该函数转发此引用。在get2
中,get
的结果被视为临时结果,这是正确的。但我可以保证该引用背后的数据不是暂时的。
以下代码重现了该问题:
char * buffer; // for raw binary data, will be allocated somewhere
const char& getRaw(int idx){
return buffer[idx];
}
const int& getInt(int idx){
return getRaw(idx);
}
在这种情况下我该怎么办? (与此同时,我甚至可以发布解决方案,但只要暂停,我就无法回答。)
答案 0 :(得分:0)
对于一位经验丰富的C ++程序员来说,问题应该是非常明显的:我隐含地转换为char&到int&在getInt中。因此编译器将创建一个临时int并返回对它的引用,而不是仅仅返回char&并将其重新解释为int&。
重新解释演员有助于:
char * buffer; // for raw binary data, will be allocated somewhere
const char& getRaw(int idx){
return buffer[idx];
}
const int& getInt(int idx){
return reinterpret_cast<const int&>(getRaw(idx));
}