C++ 变量等于非变量

use*_*180 3 c++

generate = !generate;
Run Code Online (Sandbox Code Playgroud)

我在这里的 generateGaussianNoise 函数中看到了这一点:https : //en.wikipedia.org/wiki/Box%E2%80%93Muller_transform

double generateGaussianNoise(double mu, double sigma)
{
    static const double epsilon = std::numeric_limits<double>::min();
    static const double two_pi = 2.0*3.14159265358979323846;

    thread_local double z1;
    thread_local bool generate;
    generate = !generate;
Run Code Online (Sandbox Code Playgroud)

我不明白这个逻辑: variable = !variable;

来自 Python 背景。有人可以解释一下吗?

一个具体问题:我希望generate = True在这里的某个地方,但我没有看到。

两个具体问题:

if (!generate)
   return z1 * sigma + mu;
Run Code Online (Sandbox Code Playgroud)

如果在这段代码之后才分配 z1 ,则此代码如何工作?

Som*_*ude 6

根据这个参考

在块范围内用说明符声明的变量 ... thread_local(C++11 起) 具有 ... 线程 (C++11 起) 存储持续时间,但在第一次控制通过它们的声明时被初始化

[强调我的]

所以当函数第一次被调用时,generate变量将被默认初始化,对于thread_local变量意味着零初始化bool变量的零初始化意味着它将被设置为false,而对于 adouble它将被设置为0.0