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

时间:2013-07-16 09:28:34

标签: c++ compiler-construction android-ndk const stdstring

奇怪的行为。 我用c ++开发了android原生应用程序,并且遇到了bug。某些功能由于某种原因未被调用。经过一些还原和比较..

这使程序麻烦..

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 ver 14。这个const std :: string声明会影响到另一个堆栈的内存吗?即。 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;
};

1 个答案:

答案 0 :(得分:4)

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

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

int const x = 5;

const int x = 4;

导致x为常数整数。

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