"std::string const"与"const std::string"

"std::string const" versus "const std::string"

本文关键字:const string std      更新时间:2023-10-16

奇怪的行为。我正在用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::字符串"的问题,也是声明本身的问题。很抱歉

这是我的源代码。当我取消注释那些std::string时,它不能正常工作。我在我的android上画了一些东西,但当使用std::string时,一些网格(顶点)的初始位置不同。从逻辑上讲,它一定不会影响这个常数是否存在。我在windowscygwin上使用ndk编译器版本4.6,ndk版本14。这个conststd::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;
};

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

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

int const x = 5;

const int x = 4;

结果x是一个常量整数。

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