Я использую Airplay SDK, который является платформой для создания приложений C ++ для смартфонов.У этого также есть симулятор x86, который использует компилятор MS Visual C ++ IDE +.
Теперь у меня есть этот класс:
namespace Fair {
class Bitmap : public Sprite {
public:
const CIw2DImage* const& getBitmapData() { return bitmapData; }; // warning: returning reference to temporary
private:
CIw2DImage* bitmapData;
};
}
Я получаю предупреждение выше, если я собираюсь с GCC (ARM)Debug.Я не получаю предупреждение с (x86) Debug.
Я спросил в другом месте, и я получил этот ответ:
Поскольку `const CIw2DImage * const 'является указателем const на constCIw2DImage и Bitmap :: bitmapData - указатель на неконстантный компилятор CIw2DImage автоматически переводит указатель на неконстантный в константный, так что здесь временный.Следующий код может быть сгенерирован «типичным» компилятором:
const CIw2DImage* const& getBitmapData() {
const CIw2DImage* const tmp = bitmapData;
return tmp;
}
Возможно, (x86) компилятор не обнаружит эту проблему.
Возможно, вы захотите удалить символ ссылки (&)из прототипа (почему вы хотите использовать ссылку в этом случае?)
Если компилятор делает это, то это абсолютно неправильная практика ..?Сделать возвращаемое значение более «строгим» просто на уровне компилятора, чтобы предотвратить «злоупотребление».(x86) не обнаруживает, потому что это не «вызывает» проблему в 1-м случае ..?
Я возвращаю ссылку на указатель по единственной причине, чтобы «сохранить» 32 бита памяти,то есть использовать тот же блок памяти, что и указатель bitmapData, но в другом контексте.
Любые комментарии, пожалуйста?