MSVC имеет аналог GCC ({}) - PullRequest
       1

MSVC имеет аналог GCC ({})

8 голосов
/ 13 марта 2011

Есть ли у msvc аналог gcc ({}).

Я предполагаю, что ответ - нет.
Заметим, что это вопрос возможностей компилятора, а не вкуса или стиля.

Не то чтобы я рекомендовал кому-либо начинать использовать конструкцию ({}) по этому вопросу.

Ссылка на конструкцию ({}): http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#SEC62 официально называется "Заявления"и объявления в выражениях ".Это позволяет встраивать выражения (например, for, goto) и объявления в выражения

Ответы [ 2 ]

10 голосов
/ 13 марта 2011

В некотором смысле, да.Это составное выражение , которое можно рассматривать как лямбда-функцию, которая вызывается сразу и вызывается только один раз.

В последних версиях MSVC должны поддерживаться лямбда-функции, поэтомучто-то вроде:

[](){ /* 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
4 голосов
/ 13 марта 2011

Нет, он не содержит эквивалентной формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...