我用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)