首页 > 解决方案 > 在函数参数传递方面,C++ 中是否有任何“可变”类型,就像在 python 中一样

问题描述

Python 利用引用调用系统:如果您将整数、字符串或元组(也称为“可变”类型)等参数传递给函数,则传递就像按值调用一样,因为您无法更改传递给函数的不可变对象的值。而传递可变对象可以被认为是通过引用调用,因为当它们的值在函数内部发生变化时,它也会在函数外部反映出来。如果我们在这个引用调用系统的背景下定义“可变”,那么 C++ 中是否存在任何“可变”类型?换句话说,当传递给按值调用函数时,是否有任何类型的值变化将反映在函数之外?

还有一个附带问题:为什么 python 使用引用调用系统?乍一看,python 中的可变类型似乎可能会导致并发问题。

标签: pythonc++

解决方案


不和是,它在 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;
}

推荐阅读