小编Rya*_*yne的帖子

如何使用分支逻辑构造不可变数据类型的实例?

我用C++编程并尝试使用不可变数据类型,作为一种学习新东西的方法,也因为我被告知使用不可变数据类型可以更容易推理代码的影响,因为你知道一次构造一个实例,它无法更改.

我经常想使用分支逻辑创建数据实例.例如:

int x = 0;
if (a)
{
    x = 1;
}
else
{
    if (b)
    {
        x = 2;
    }
    else
    {
        x = 3;
    }
}
DoSomething(x);
Run Code Online (Sandbox Code Playgroud)

但是,如果我的数据类型是不可变的,那么该代码将无法编译,因为不能有复制赋值运算符:

struct Immutable
{
public:
    const int x;

    Immutable(const int x)
    : x(x)
    {}
}

Immutable x(0);
if (a)
{
    x = Immutable(1); // Compiler error
...
Run Code Online (Sandbox Code Playgroud)

我可以想到两种可能的解决方案.首先,我可以使用三元运算符根据条件构造我的数据:

Immutable x = a ? Immutable(1) : (b ? Immutable(2) : Immutable(3));
Run Code Online (Sandbox Code Playgroud)

但这会很快导致复杂的语法.

或者,我可以使用std::unique_ptr:

std::unique_ptr<Immutable> x = nullptr;
if (a) …
Run Code Online (Sandbox Code Playgroud)

c++ immutability

1
推荐指数
1
解决办法
98
查看次数

标签 统计

c++ ×1

immutability ×1