“std::string const”与“const std::string”

min*_*imo -2 c++ compiler-construction constants stdstring android-ndk

奇怪的行为。我正在用 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");
Run Code Online (Sandbox Code Playgroud)

这使程序工作..

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");
Run Code Online (Sandbox Code Playgroud)

无论如何它都有效,但我不知道为什么这种差异会导致如此奇怪的行为。有什么猜想吗??


添加了完整的源代码。

这不仅是“std::string const”与“const std::string”的问题,而是声明本身。对不起。

这是我的源代码。当我取消注释那些 std::string 的东西时,它无法正常工作。我在我的 android 上画了一些东西,但是当使用 std::string 东西时,一些网格(顶点)的初始位置不同。从逻辑上讲,它不能影响这个常量是否存在。我在 windows cygwin 上使用 ndk 编译器版本 4.6,ndk 版本 14。这个 const std::string 声明会影响另一个堆栈的内存吗?IE。transh值什么的?

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;
};
Run Code Online (Sandbox Code Playgroud)

RLa*_*aaa 5

取自:http : //www.cprogramming.com/tutorial/const_correctness.html

声明 const 变量时,可以将 const 放在类型之前或之后

int const x = 5;
Run Code Online (Sandbox Code Playgroud)

const int x = 4;
Run Code Online (Sandbox Code Playgroud)

导致 x 是一个常数整数。

您提供的代码示例不是您遇到的“奇怪行为”的原因。