msvc是否具有gcc({})的模拟.
我认为答案是否定的.
请注意,这是编译器功能的问题,而不是品味或风格的问题.
不是我建议任何人开始使用({})构造的问题.
对({})构造的引用是:http: //gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#SEC62,正式称为"表达式中的语句和声明".它允许将语句(如for,goto)和声明嵌入到表达式中.
Dam*_*mon 10
在某种程度上,是的.这是一个复合语句表达式,可以将其视为一个立即调用的lambda函数,并且只调用一次.
最新版本的MSVC应该支持lambda函数,所以这将是这样的:
[](){ /* your compound statement expression here */ }();
Run Code Online (Sandbox Code Playgroud)
编辑:删除了一个多余的括号
编辑2:为了您的娱乐,这里有一个例子,说明如何使用一些(实际上是完全愚蠢的)真实代码的变化.不要太在意代码的实际用处,但它有多么富有表现力,编译器甚至可以优化它:
#include <string.h>
#include <stdio.h>
int main()
{
unsigned int a =
({
unsigned int count = 0;
const char* str = "a silly thing";
for(unsigned int i = 0; i < strlen(str); ++i)
count += str[i] == 'i' ? 1 : 0;
count;
});
unsigned int b =
[](){
unsigned int count = 0;
const char* str = "a silly thing";
for(unsigned int i = 0; i < strlen(str); ++i)
count += str[i] == 'i' ? 1 : 0;
return count;
}();
printf("Number of 'i' : %u\t%u\n", a, b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
... gcc 4.5编译为:
movl $2, 8(%esp)
movl $2, 4(%esp)
movl $LC0, (%esp)
call _printf
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1155 次 |
| 最近记录: |