luc*_*nte 5 c++ constructor c++11
在C++ 11中的一些unique_lock 构造函数中,可以传递一些类,如标志,即
auto lock = std::unique_lock<std::mutex> lock(m, std::defer_lock);
Run Code Online (Sandbox Code Playgroud)
在哪里std::defer_lock定义为
struct defer_lock {}
Run Code Online (Sandbox Code Playgroud)
为什么这样做,而不是枚举?
我试图将它应用于一个小代码示例,但我无法编译:
class A {};
void foo(A a) {}
int main() {
foo(A); // error: 'A' does not refer to a value
}
Run Code Online (Sandbox Code Playgroud)
当我把括号放在一起foo(A());工作时,但我没有看到STL的区别.为什么这有不同的表现?
实际上,std::defer_lock没有定义为你写的,而是as
constexpr std::defer_lock_t defer_lock = std::defer_lock_t();
Run Code Online (Sandbox Code Playgroud)
这就是为什么你的版本"模仿"(严重)标准库定义不起作用的原因; 将你的定义改为例如.
struct A {} A;
Run Code Online (Sandbox Code Playgroud)
它会起作用.(或者,尝试稍微有点吸引力struct A_t {} A)
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |