msvc是否有类似于gcc中的({})语法?
我认为答案是否定的。
请注意,这是关于编译器功能的问题,而不是关于品味或风格的问题。
并不是说我建议任何人开始使用({})语法,仅仅是想问一下它是否存在。
关于({})语法的参考资料可以在这里找到。它被正式称为“表达式中的语句和声明”,允许将语句(如for、goto)和声明嵌入到表达式中。
msvc是否有类似于gcc中的({})语法?
我认为答案是否定的。
请注意,这是关于编译器功能的问题,而不是关于品味或风格的问题。
并不是说我建议任何人开始使用({})语法,仅仅是想问一下它是否存在。
关于({})语法的参考资料可以在这里找到。它被正式称为“表达式中的语句和声明”,允许将语句(如for、goto)和声明嵌入到表达式中。
某种程度上是的。这是一个复合语句表达式,可以将其视为立即调用且仅调用一次的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
break
或continue
其所在的循环。 - Johannes Schaub - litbtry()
宏,你需要能够使用 return
。 - Timmmm
vector<int> a({1, 2, 3})
吗? - Johannes Schaub - litb