警告:返回对本地临时的引用(但我可以保证它不是临时的)

时间:2014-07-25 13:22:01

标签: c++ compiler-warnings temporary

我有一个函数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);
}

在这种情况下我该怎么办? (与此同时,我甚至可以发布解决方案,但只要暂停,我就无法回答。)

1 个答案:

答案 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));
}