c ++中的$符号

Jam*_*mes 7 c++ syntax multithreading locking

我从开源库中读取以下代码.令我困惑的是美元符号的使用.任何人都可以在代码中澄清$的含义.非常感谢您的帮助!

   __forceinline MutexActive( void ) : $lock(LOCK_IS_FREE) {}
    void lock  ( void );
    __forceinline void unlock( void ) { 
      __memory_barrier();     // compiler must not schedule loads and stores around this point
      $lock = LOCK_IS_FREE; 
    }
  protected:
    enum ${ LOCK_IS_FREE = 0, LOCK_IS_TAKEN = 1 };
    Atomic $lock;
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica 8

它被用作标识符的一部分.

[C++11: 2.11/1]标识符定义为"任意长的字母和数字序列".它在上面给出的语法中定义了"字母和数字",它只列出数字,小写和大写罗马字母,以及明确的下划线字符,但也允许"其他实现定义的字符",其中可能是一个.

在这种情况下,$除了作为标识符的一部分之外没有其他特殊含义 - 在这种情况下,变量的名称.它位于变量名称的开头没有特别的意义.

  • OP代码所讨论的代码来自https://code.google.com/p/point-frag/,以防任何人感兴趣.作者在CMakeLists.txt中使用`-std = c ++ 0x`标志.所以你是对的.+1 (2认同)

dou*_*536 7

有一个gcc开关,-fdollars-in-identifiers明确允许$ idenfitiers.

也许他们启用它并使用$作为极不可能与普通名称冲突的东西.

-fdollars式的标识符

接受$ in标识符.您还可以使用-fno-dollars-in-identifiers选项明确禁止使用$.(GNU C在大多数目标系统上默认允许$,但也有一些例外.)传统C允许字符$构成标识符的一部分.但是,ISO C和C++禁止在标识符中使用$.

请参阅gcc文档.希望链接保持良好.