python - 在函数参数传递方面,C++ 中是否有任何“可变”类型,就像在 python 中一样
问题描述
Python 利用引用调用系统:如果您将整数、字符串或元组(也称为“可变”类型)等参数传递给函数,则传递就像按值调用一样,因为您无法更改传递给函数的不可变对象的值。而传递可变对象可以被认为是通过引用调用,因为当它们的值在函数内部发生变化时,它也会在函数外部反映出来。如果我们在这个引用调用系统的背景下定义“可变”,那么 C++ 中是否存在任何“可变”类型?换句话说,当传递给按值调用函数时,是否有任何类型的值变化将反映在函数之外?
还有一个附带问题:为什么 python 使用引用调用系统?乍一看,python 中的可变类型似乎可能会导致并发问题。
解决方案
不和是,它在 C++ 中略有不同。
在 c++ 中 mutable 允许修改声明为 mutable 的类成员,即使包含对象声明为 const。在这里,即使我们创建了常量对象,我们也可以更改类变量名称。
您在 python 中引用的那个在 C++ 中是不可能的,按值传递变量永远不能更改从被调用函数传递的变量。
考虑这个例子
#include <iostream>
#include <string.h>
using namespace std;
class A {
public:
mutable string name;
int val;
A(string s, int a)
{
name= s;
val = a;
}
void changename(string p) const
{
name=p;
}
void display() const
{
cout << " name is: " << name << endl;
cout << "Age is: "
<< val << endl;
}
};
int main()
{
const A c1("Mouse", 3);
c1.display();
c1.changename("Internet");
c1.display();
std::cout<<c1.name;
}
推荐阅读
- amazon-web-services - AWS ECS Fargate 端口映射
- php - 在我调整窗口大小之前不显示图像?
- javascript - Storybook 5.2 (CSF) - 如何添加 react-router-dom 链接 - “你不应该在外部使用
" - java - ImageIO 无法读取图像输入文件
- linux-kernel - 哪个 linux 内核代码为 SATA 设备创建 /dev/sda 或 /dev/sda1?
- reactjs - 标题和事件表单输入未发布并使用 reactjs 检索
- c# - 命令不会在命令提示符中运行
- javascript - CKeditor Wordcount 插件以针对特定字段
- c++ - 为什么(-i)的类型,我是无符号整数,仍然是无符号整数?
- c++ - 在基类中编写工厂方法