C++ 如果std::string是';它从未被修改过?

C++ 如果std::string是';它从未被修改过?,c++,c++11,C++,C++11,我使用std::string进行内存管理,并提高存储位置相关数据的效率 字符串的初始化长度为30字节,之后除了析构函数外,再也不会对其容器进行任何调用 我想知道的是,如果它们被初始化后保证留在一个地方,并且假设它们永远不会被更改?除非您以某种方式修改字符串,否则其动态数据的地址不会更改。我强烈建议您在描述的情况下使用const std::string,以提高可读性和可维护性 除非您以某种方式修改字符串,否则其动态数据的地址不会更改。我强烈建议您在描述的情况下使用const std::string

我使用std::string进行内存管理,并提高存储位置相关数据的效率

字符串的初始化长度为30字节,之后除了析构函数外,再也不会对其容器进行任何调用


我想知道的是,如果它们被初始化后保证留在一个地方,并且假设它们永远不会被更改?

除非您以某种方式修改字符串,否则其动态数据的地址不会更改。我强烈建议您在描述的情况下使用
const std::string
,以提高可读性和可维护性

除非您以某种方式修改字符串,否则其动态数据的地址不会更改。我强烈建议您在描述的情况下使用
const std::string
,以提高可读性和可维护性

除非您以某种方式修改字符串,否则其动态数据的地址不会更改。我强烈建议您在描述的情况下使用
const std::string
,以提高可读性和可维护性

除非您以某种方式修改字符串,否则其动态数据的地址不会更改。我强烈建议您在描述的情况下使用
const std::string
,以提高可读性和可维护性

如果通过move,您的意思是指向字符串的内部指针可能会被更改,那么不,只要您不调用任何非常量字符串方法,就不应该发生这种情况


但是,需要注意的是,如果使用非简单分配器,则该分配器可能会更改分配的内存,而不管您如何与字符串交互。但是,通常使用简单分配器,分配内存的内容和指向该内存的指针不应自动更改。

如果通过移动,您的意思是指向字符串的内部指针可能会更改,那么不,只要不调用任何非常量字符串方法,就不应发生这种情况


但是,需要注意的是,如果使用非简单分配器,则该分配器可能会更改分配的内存,而不管您如何与字符串交互。但是,通常使用简单分配器,分配内存的内容和指向该内存的指针不应自动更改。

如果通过移动,您的意思是指向字符串的内部指针可能会更改,那么不,只要不调用任何非常量字符串方法,就不应发生这种情况


但是,需要注意的是,如果使用非简单分配器,则该分配器可能会更改分配的内存,而不管您如何与字符串交互。但是,通常使用简单分配器,分配内存的内容和指向该内存的指针不应自动更改。

如果通过移动,您的意思是指向字符串的内部指针可能会更改,那么不,只要不调用任何非常量字符串方法,就不应发生这种情况



但是,需要注意的是,如果使用非简单分配器,则该分配器可能会更改分配的内存,而不管您如何与字符串交互。不过,通常使用简单分配器,分配内存的内容和指向该内存的指针不应自动更改。

这听起来好像您可能想使用
std::unique\u ptr
而不是
std::string
。这使得您实际上没有存储字符串,而只希望自动销毁,显式。

这听起来好像您可能希望使用
std::unique\u ptr
而不是
std::string
。这使得您实际上没有存储字符串,而只希望自动销毁,显式。

这听起来好像您可能希望使用
std::unique\u ptr
而不是
std::string
。这使得您实际上没有存储字符串,而只希望自动销毁,显式。

这听起来好像您可能希望使用
std::unique\u ptr
而不是
std::string
。这使得您实际上并没有存储字符串,而只需要显式的自动销毁。

请参阅:“从c_str()获取的指针可能无效,方法是:将字符串的非常量引用传递给任何标准库函数,或对字符串调用非常量成员函数(…)”我确实为初始化传递了一个对char*的非常量引用,但它应该只是复制该数据,然后我假设它会很好。请阅读您的引用,但幸运的是,我不会在初始化后传递或调用成员函数(除了c_str(),在这种情况下,您还应该注意“写入通过
c_str()
访问的字符数组是未定义的行为”。这是不言而喻的,因为您必须抛弃
常量
-ness如果长度总是固定的,
std::array
可能更合适。无论某些愚蠢的维护程序员决定如何处理它们,它们都保证保持在一个位置。请参阅:“从c_str()获取的指针可能会因以下情况而无效:将字符串的非常量引用传递给任何标准库函数,或调用字符串上的非常量成员函数(…)”我确实为初始化传递了一个对char*的非常量引用,但它应该只是复制该数据,然后我假设它会很好。请阅读您的引用,但幸运的是,我不会在初始化后传递或调用成员函数(除了c_str(),在这种情况下,您还应该注意“写入通过
c_str()
访问的字符数组是未定义的行为”。哪个王国