除了常量成员函数中的可变成员之外,“mutable”是否还有更广泛的应用?
C 中的“mutable”关键字可以更改数据成员在 const 成员函数中。然而,有些人可能想知道它是否还有其他目的。
实际上,“mutable”关键字区分按位“const”和逻辑“const”。逻辑“const”表示对象不会通过其公共接口明显改变。这包括诸如在 const 函数中锁定互斥体以实现线程安全之类的场景,因为修改发生在对象的内部状态内,无法从外部访问。
另一个应用程序正在缓存计算值并通过可变成员函数访问它们。这样的函数可以一次获取值并存储它,保持逻辑“const”,同时仍然允许内部修改。
此外,C 11 引入了可变 lambda。这些允许修改捕获的变量(通常按值引用)。例如:
int x = 0; auto f1 = [=]() mutable {x = 42;}; // OK auto f2 = [=]() {x = 42;}; // Error
这里,'f2' 失败,因为非可变 lambda 捕获是不可修改的。因此,“可变”不仅可以更改 const 成员函数中的成员,还可以扩展到区分按位和逻辑“const”,并促进可变 lambda 中的数据修改。
以上是除了 Const 成员函数之外:'mutable”关键字在 C 中还有哪些其他用途?的详细内容。更多信息请关注PHP中文网其他相关文章!