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 != |
您可以看到一些可选的令牌由字母组成。因此,您可以在能够正确处理它们的编译器中编写
然而,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 <:.
以便正确处理
它用于没有
§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使用的某些字符的情况。