如何在没有互斥实例的情况下编译lock_guard <mutex>构造函数?

Dak*_*orn 0 c++ multithreading mutex c++11

我现在正在研究C++ 11中的线程,我遇到了以下代码:

lock_guard<mutex> lg(mutex);
Run Code Online (Sandbox Code Playgroud)

没有变数mutex.mutex只是类型的名称.

任何人都可以解释我上面的代码行如何工作?

为什么编译器(GCC)不会打印任何错误?

完整代码:

#include <iostream>
#include <thread>
#include <mutex>
#include <chrono>

using namespace std;

void do_something()
{
    lock_guard<mutex> lg(mutex);

    cout << "Working..." << endl;

    this_thread::sleep_for(chrono::milliseconds(3000));
}

int main()
{
    thread thd(do_something);
    thd.join();
}
Run Code Online (Sandbox Code Playgroud)

Bra*_*ohn 8

编译器认为这是一个原型函数声明:

lock_guard<mutex> lg(mutex);
Run Code Online (Sandbox Code Playgroud)

为了清楚起见,编译器将其解析为名为"lg"的函数的声明,该函数将互斥锁作为参数并返回lock_guard实例.

#include <mutex>

int main()
{
    using namespace std;
    lock_guard<mutex> lg(mutex);
    return 0;
}

vc12 output : warning C4930 : 'std::lock_guard<std::mutex> lg(std::mutex)' : prototyped function not called(was a variable definition intended ? )
Run Code Online (Sandbox Code Playgroud)