gpt4 book ai didi

c++ - 如何避免 C++ 匿名对象

转载 作者:IT老高 更新时间:2023-10-28 22:58:57 25 4
gpt4 key购买 nike

我有一个 ScopedLock 类,它可以帮助在超出范围时自动释放锁。但是,问题是:有时团队成员会编写无效的锁定代码,例如

{
ScopedLock(mutex); // anonymous
xxx;
}

上面的代码是错误的,因为ScopedLock对象是立即构造和销毁的,所以没能锁定预期的区域(xxx) .我希望编译器在尝试编译此类代码时给出错误。这个可以吗?

我已经搜索了 g++ 警告选项,但没有找到正确的选项。

最佳答案

我在一个代码库中看到了一个有趣的技巧,但它仅在您的 scoped_lock 类型不是模板时才有效(std::scoped_lock 是)。

#define scoped_lock(x) static_assert(false, "you forgot the variable name")

如果你正确使用这个类,你就有

scoped_lock lock(mutex);

并且由于 scoped_lock 标识符后面没有打开括号,宏不会触发并且代码将保持原样。如果你写\

scoped_lock(mutex);

宏将触发,代码将被替换为

static_assert(false, "you forgot the variable name");

这将生成一条信息性消息。

如果您使用限定名称

threads::scoped_lock(mutext);

那么结果仍然无法编译,但消息不会那么好。

当然,如果你的锁是模板,那么坏代码就是

scoped_lock<mutex_type>(mutex);

不会触发宏。

关于c++ - 如何避免 C++ 匿名对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16189742/

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