gpt4 book ai didi

c++ - 强制函数仅作为赋值操作数调用

转载 作者:行者123 更新时间:2023-11-30 05:45:12 24 4
gpt4 key购买 nike

是否可以这样声明一个函数

auto i = foo.GetLock();

有效,但是

foo.GetLock();

导致编译错误?

我的接口(interface)有一个返回 RIIA 风格锁对象的方法,我想确保没有人决定只调用 GetLock() 来锁定锁。

以前是这样的

class CSomethingOrElse : private CLockable
{
...
} foo;

CLocker<CSomethingOrElse> lock(foo);

但这对我来说太冗长了,我真的很想使用 auto

最佳答案

foo.GetLock(); 是一个表达式语句,因此可以以这种方式使用任何有效的表达式。你不能在编译时禁止它:你能得到的最好的是警告。

假设您的对象在销毁时释放锁,那么不将结果存储在变量中的调用应该不是什么大问题,因为锁会立即获取并释放。

创建一个保护对象,类似于您在解决方案中描述的内容,是正确的方法。事实上,C++ 标准库以类似的方式处理 std::lock_guard。 .

关于c++ - 强制函数仅作为赋值操作数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29471789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com