msvc是否具有gcc({})的模拟。
我认为答案是否定的。
请注意,这是编译器功能的问题,而不是品味或风格的问题。
不是我建议任何人开始使用({})构造的问题。
对({})构造的引用是:http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#SEC62正式称为“表达式中的语句和声明”。它允许将语句(如for,goto)和声明嵌入到表达式中。
答案 0 :(得分:10)
在某种程度上,是的。这是一个compound statement expression,人们可以将其视为一个立即调用的lambda函数,只调用一次。
MSVC的最新版本应该支持lambda函数,因此类似于:
[](){ /* your compound statement expression here */ }();
编辑:删除了多余的括号
编辑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;
}
... gcc 4.5编译为:
movl $2, 8(%esp)
movl $2, 4(%esp)
movl $LC0, (%esp)
call _printf
答案 1 :(得分:4)
不,它不包含等效表格。