通过它的地址更改 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.
我想知道我们是否可以通过指向它的指针修改 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.