-1

奇妙な振る舞い。C ++でAndroidネイティブアプリを開発していて、バグが発生しました。何らかの理由で一部の関数が呼び出されませんでした。いくつかの元に戻して比較した後..

これはプログラムの問題を引き起こしました..

const std::string STR_PATH_ASSET("assets/");
const std::string STR_PATH_SD("/sdcard/unlock_data/assets/");
const std::string STR_SUFFIX_PNG(".png");
const std::string STR_SUFFIX_KTX(".ktx");

これにより、プログラムが機能します。

std::string const STR_PATH_ASSET("assets/");
std::string const STR_PATH_SD("/sdcard/unlock_data/assets/");
std::string const STR_SUFFIX_PNG(".png");
std::string const STR_SUFFIX_KTX(".ktx");

とにかく機能しますが、この違いがなぜこのような奇妙な動作をもたらすのかわかりません。推測は??


完全なソースを追加。

「std::string const」と「const std::string」の問題だけでなく、その宣言自体でもありました。ごめん。

これが私のソースコードです。これらの std::string のコメントを外すと、正しく機能しません。私のアンドロイドに何かを描いていますが、std::string のものを使用すると、一部のメッシュ (頂点) の初期位置が異なります。論理的には、この定数が存在するかどうかに影響を与えてはなりません。Windows cygwinでndkコンパイラバージョン4.6、ndkバージョン14を使用しています。この const std::string 宣言は別のスタックのメモリに影響しますか? すなわち。トランス値か何か?

typedef enum _ImageCompressType{
    //REF http://stackoverflow.com/questions/9148795/android-opengl-texture-compression
    COMPRESS_UNAVAILABLE = -1,
    COMPRESS_ETC1 = 1,
    COMPRESS_PVRTC,
    COMPRESS_ATITC,
    COMPRESS_S3TC
}ImageCompressType;

typedef enum _FileDataFrom{
    FROM_ASSET, FROM_SD
}FileDataFrom;

//std::string const STR_PATH_ASSET("assets/");
//std::string const STR_PATH_SD("/sdcard/unlock_data/assets/");
//std::string const STR_SUFFIX_PNG(".png");
//std::string const STR_SUFFIX_KTX(".ktx");

class ImagesLoader {
public:
    ImagesLoader* mgr;

    static ImagesLoader* getInstance();
    static void destroyInstance();

    ImageCompressType TypeImgComrpess;

//  GLuint* loadTextures(FileDataFrom from, std::vector<std::string> filename);
private:
    ImagesLoader() {}
    ~ImagesLoader() {}

    static ImagesLoader* self;
};
4

1 に答える 1

6

から取得: http://www.cprogramming.com/tutorial/const_correctness.html

const 変数を宣言する場合、型の前または後に const を置くことができます。

int const x = 5;

const int x = 4;

x は定数整数になります。

あなたが提供したコード サンプルは、あなたが遭遇した「奇妙な動作」の原因ではありません。

于 2013-07-16T09:49:42.513 に答える