虽然我试图理解为什么the code like int(*)();
与 g ++ 编译良好,但我发现了更奇怪的事情:
int main()
{
int(*){} Is it C++11 or any other language?
}
此代码使用 g ++ 4.8.1 进行编译,请参阅live example(flags:-std=c++11 -pedantic-errors
)。 clang 3.4 和 vc ++ 2013 都没有编译它。
是否只有 g ++ 支持新的C ++ 11样式注释?还是编译错误?
以下是我发现的关于这种风格的评论":
评论的通常结构(可以省略的部分括在括号[ ... ]
中):
int // or another valid C++ type
(*) // or another sequence of '*' and/or '&' characters with nonzero length
{"[Comment header]"}
[Comment body]
{[Comment footnote]}
可以使用;
来代替使用脚注终止符号int(*){} Comment ;
。
{ ... }
中的最后一个构造,则可以省略终止符号和脚注:{ int(*){} Comment }
。- + * / % & | ^ ~ = . , : ! ? $ ( ) [ ] < >
。; { } # @
。'...'
和字符串文字"..."
,但符号'
和"
本身不能单独使用。通常的C ++评论// ...
和/* ... */
在新的&#34;评论&#34;中正常工作。预处理程序指令,宏,有向图和三字图也可以正常工作(live example):
#define TerminatingSymbol ;
int(*) ??< %> // a pair of trigraph and digraph
"This is a string" // string literal
#if 1
Comment
#endif
TerminatingSymbol
std::cout << "Hello, ";
int(*){} /* Character literal: */ 'c' <% ??>
std::cout << "world!" << std::endl;
我无法理解浮点文字是如何在这样的&#34;评论&#34;中工作的。
The following code sample说明了新评论&#34;
的功能#include <iostream>
int main()
{
void(*){} do not try this float; // simple C++ keywords are allowed, of course
std::cout << "1";
int(&){"Allowed characters"}
- + * / % & | ^ ~ = . , : ! ? $ ( ) [ ] < > ; // ';' itself is not allowed
std::cout << "2";
char(************************************)
{"William Blake wrote:"}
Tyger! Tyger! burning bright
In the forests of the night,
What immortal hand or eye
Could frame thy fearful symmetry?
{"The Tyger", 1794}
std::cout << "3";
float(*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*)
{"Some formulas"}
2 x 2 = 4
pi ~= 3.145926 ...
E = m * c ^ 2
a ^ n + b ^ n != c ^ n, n > 2
{42}
std::cout << "4";
unsigned(*(*(*(*(*(*(*(*(*(*())))))))))){}
It is a last comment
}