C++有没有办法确定字符串是"interned"还是在只读持久位置?

Is there a way in C++ to determine if a string is "interned" or in a read only persistent location?

本文关键字:只读 位置 interned 字符串 C++ 有没有      更新时间:2023-10-16

许多编译器和加载程序将分配字符串简单地称为"字符串",仅读取持久的内存段。有没有办法在运行时确定这一点,以便在需要持久性并通过" const char *"参数时不分配重复项?也可以防止释放它们。

通用答案是否。不是以便携式的方式。

因此,当(不良接口)函数返回静态或动态分配的内存时,实际上没有办法分辨出差异。例如,

char* num_to_string(int number) {
    static char buffer[5];
    if(number < 10000) {
        std::sprintf(buffer, "%d", number);
        return buffer;
    }
    char* bigger_buffer = new char[50];
    std::sprintf(bigger_buffer, "%d", number);
    return bigger_buffer;
}

当他不愿意清理返回的内存时,上述功能的使用将无法(如果不查看实现)。