有没有任何例子三重冒号(:: :)是c ++代码中的有效语法?

ggr*_*grr 2 c++ syntax colon

在我的印象中,我似乎看到了类似的东西:

A:::b()
Run Code Online (Sandbox Code Playgroud)

但是我不记得它是不是c ++,也是在c ++中搜索过"三重冒号"之后但是在c ++中看起来很少有关于它的信息,有没有例子代码可以在代码中有3个冒号(:: :)有效的语法?

小智 6

这有点偏离主题,因为它涉及内联汇编而不是C ++本身。但是,这是给那些在以下表达式中看到此运算符后(如我一样)到达此处的人的提示:

asm volatile("" ::: "memory");
Run Code Online (Sandbox Code Playgroud)

gcc使用此语法来告诉编译器创建“内存屏障”。维基百科的“ 内存排序”主题比我能提供的更好。


chr*_*ris 5

鉴于全球功能b:

int b() {
    return 5;    
}
Run Code Online (Sandbox Code Playgroud)

有两个(实际上,如果你有创意的话,每个Steephen的答案会更多1)这种情况会有效,但只有空格:

  1. 作为标签:

    int main() {
        A: ::b();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 作为条件表达式的一部分:

    int main() {
        int A = 0;
        int result = true ? A: ::b();
    }
    
    Run Code Online (Sandbox Code Playgroud)

需要空间的原因是因为C++词法是贪婪,总是LEXES :::::其次:,从不:其次::.(一个明显的例外是>>允许结束两个模板参数/参数列表,因为特殊的更改C++ 11.)


1:查看访问修饰符,继承,构造函数初始化列表的示例.

  • [maximal munch principle](http://stackoverflow.com/a/28354898/1708801)出现在C++的一堆地方. (2认同)