通过它的地址更改 std::string 值是否有效?

Is changing the std::string value through it's address is valid?

我想知道我们是否可以通过指向它的指针修改 std::string 值。请考虑以下示例。

#include <iostream>

void func(std::string *ptr) {
    *ptr = "modified_string_in_func";
}
int main()
{
    std::string str = "Original string";
    func(&str);
    std::cout << "str = " << str << std::endl;
    return 0;
}

我尝试了 GCC、Clang 和 Visual C++。所有人都在修改字符串 valirable str 而没有任何警告或错误,但我不太确定这样做是否合法。

请说明。

这是合法的。

您正在为字符串分配新值,但使用指针来引用原始字符串;这不再是非法的,然后不使用指针来引用原始字符串即

std::string foo = "foo";
foo = "bar";

// is pretty much the same thing as

std::string* foo_ptr = &foo;
*foo_ptr = "bar";

// which is what you are doing.