string 传参

一个小问题

void test ( string& t) {
    cout << t <<endl;
}
int main() {
    string a = "abcd";
    test(a.substr(2));
    return 0;
}

程序会报错

如果修改为void test(const string& t),就可以通过编译

### C# 中字符串作为函数参数的用法 在 C# 编程语言中,字符串可以像其他数据类型一样被传递给方法或函数。由于字符串是引用类型,在默认情况下,当将其作为参数传递时,实际上是将该字符串对象的引用传递给了方法[^1]。 #### 值传递 (Pass by Value) 如果希望仅传递字符串的一个副本而不影响原始字符串,则可以通过值传递实现此功能。在这种模式下,任何对传入参数的操作都不会反映回调用方中的原始变量。 以下是通过值传递的例子: ```csharp static void ModifyStringByValue(string input) { input += &quot; was modified&quot;; } // 调用示例 string original = &quot;Original text&quot;; ModifyStringByValue(original); Console.WriteLine(original); // 输出仍然是 Original text ``` 这里 `input` 是按值传递的,因此即使我们在函数内部改变了它的内容,这种变化也不会作用于外部定义的 `original` 变量上。 #### 引用传递 (Pass by Reference) 为了能够修改实际的对象本身而不是其拷贝版本,应该采用引用方式来传送参数。这可通过关键词 `ref` 或者 `out` 来完成。注意的是,使用前需确保已初始化好要使用的变量(对于 out 则不需要预先赋初值)。 下面展示了一个利用 ref 关键字来进行引用传递的例子: ```csharp static void ModifyStringByRef(ref string input) { input += &quot; has been changed via reference.&quot;; } // 使用例子 string message = &quot;This is a test&quot;; ModifyStringByRef(ref message); Console.WriteLine(message); // 这里会打印 This is a test has been changed via reference. ``` 在这个场景下,因为是以引用形式提交的数据项,所以最终可以看到原版的消息串已经被更新过了。 另外值得注意的一点就是关于不可变性的讨论&mdash;&mdash;尽管看起来我们似乎可以直接更改某个特定字符串实例的状态,但实际上每次执行涉及潜在状态变更的动作都会触发新实体创建过程;也就是说旧有的那个不会真正意义上发生改变[^2]。 综上所述,理解并掌握这两种不同的参数传输机制有助于编写更加灵活高效的程序代码。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值