我看到带有互斥锁的构造函数重载标记为explicit
。我没有看到指定它的原因。我认为允许从互斥锁到相应的std::unique_lock
的隐式转换是没有害处的。这实际上很方便。例如,给定void func_a(std::unique_lock<std::mutex> lock)
和std::mutex mut
,我们可以直接在func_a
mut
上调用func_a(mut)
。对电话func_a(mut)
可能造成的潜在伤害是什么?我认为没有任何可能让用户感到惊讶的效果。所以,问题是:标记构造函数explicit
背后的基本原理是什么?