最近在学习isp过程中函数赋值的时候 发现有三种不同的赋值方式,记录一下
#include <iostream>
#include <string>
void modifyString(std::string str)
{
str = "Modified inside function";
}
void modifyStringRef(std::string& str)
{
str = "Modified inside function";
}
void modifyStringPtr(std::string* str)
{
*str = "Modified inside function";
}
int main()
{
std::string message = "Original string";
modifyString(message);
std::cout << message << std::endl; // 输出 "Original string"
modifyStringRef(message);
std::cout << message << std::endl; // 输出 "Modified inside function"
modifyStringPtr(&message);
std::cout << message << std::endl; // 输出 "Modified inside function"
return 0;
}
在这个例子中,modifyString函数接受一个std::string参数,当我们将message传递给这个函数时,message被复制,并且函数内部的修改不会影响到原始的message。而modifyStringRef函数接受一个std::string&参数,当我们将message传递给这个函数时,函数实际上接收的是message的引用,因此函数内部的修改会直接影响到原始的message。modifyStringPtr函数接受一个std::string*参数,当我们将message的地址传递给这个函数时,函数可以通过指针来修改message的值。
因此,如果你想在函数内部修改字符串,并且希望这些修改影响到原始字符串,你应该使用std::string&或std::string*。如果你不想在函数内部修改原始字符串,你应该使用std::string。