关于c ++:C语言中<:语法的意义是什么?

What is the significance of the <: syntax in C?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
<: cannot begin a template argument list

你知道吗?

1
int a<:10:>;

等于

1
int a[10];

我在写一些代码,其中有一个全局名称空间和一个受限制的名称空间,比如NS1。我在全局命名空间中有一个名为module的类,并且我导入了NS1中的一些其他库,它们也有一个名为module的类。我试图创建一个我的模块的std::列表,即NS1中一个函数内的::模块,这样做,我得到了这个编译错误。

1
2
3
4
5
std::list<::Module*> &myModule;

genllvm.cpp:60:11: error:<::’ cannot begin a template-argument list
./genllvm.cpp:60:11: note:<:’ is an alternate spelling for[’. Insert whitespace between ‘<and::
./genllvm.cpp:60:11: note: (if you use ‘-fpermissive’ G++

这个"<:"语法的意义是什么?


它的调用替代令牌。C++中有几个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 <%     {
 %>     }
 <:     [
 :>     ]
 %:     #
 %:%:   ##
 and    &&
 bitor  |
 or     ||
 xor    ?
 compl  ~
 bitand &
 and_eq &=
 or_eq  |=
 xor_eq ?=
 not    !
 not_eq !=

您可以看到一些可选的令牌由字母组成。因此,您可以在能够正确处理它们的编译器中编写if (a。它们的存在是因为键盘或字符集中缺少符号。替代标记永远不会替换为主标记(与三线图不同),但它们的行为与主标记相同。

然而,C++0x需要对EDCX1〔2〕(2.5P3)进行特殊处理:

Otherwise, if the next three characters are <:: and the subsequent character is neither : nor >, the < is treated as a preprocessor token by itself and not as the first character of the alternative token <:.

以便正确处理SomeTemplate<::SomeClass>


它用于没有[的字符集。

§6.4.6-3 (C99)

In all aspects of the language, the six tokens

1
<: :> <% %> %: %:%:

behave, respectively, the same as the six tokens

1
[  ]  {  }  #  ##


处理终端和代码页限制是一件历史性的事情。

阅读维基百科关于有向图和三角图的简短文章。


这叫做有向图。它用于终端没有C使用的某些字符的情况。