Авто когда-нибудь полезно в C / C ++? - PullRequest
6 голосов
/ 31 октября 2008

Кто-нибудь когда-нибудь видел класс хранения auto, явно используемый в C / C ++? Если да, то в какой ситуации?

Ответы [ 6 ]

25 голосов
/ 31 октября 2008

auto никогда не используется в текущем C / C ++, потому что все переменные неявно auto. Это полезно в C ++ 0x, где он может полностью заменить объявление типа - если у вас есть переменная с начальным присваиванием, 'auto' просто сделает ее типом значения присваивания, как в комментариях.

4 голосов
/ 31 октября 2008

Я не видел, чтобы auto использовался в коде, написанном за последние 10+ лет. Нет смысла использовать auto, так как единственные места, где вы можете использовать, это где бы это ни подразумевалось. Единственная причина, по которой он все еще существует, заключается в обратной совместимости, но этого следует избегать в новом коде.

3 голосов
/ 31 октября 2008

В GCC вам может понадобиться auto для объявления вложенной функции, чтобы иметь возможность определить ее в любом месте в теле функции - см. http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Nested-Functions.html

1 голос
/ 25 сентября 2012

Вот пример из моего кода, написанный на C ++ 11:

c_srgb find_in_book(const c_HVC &HVC) {
    auto b = munsell.mun_to_rgb_book.find(HVC);
    if( b != munsell.mun_to_rgb_book.end()) {
        c_srgb f = b->second;
        return f;
    } else {
        c_srgb ret;
        ret.r=ret.g=ret.b=0;
        return ret;
    }
}

Я предпочитаю это:

c_srgb find_in_book(const c_HVC &HVC) {
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<dj::color::c_HVC,dj::color::c_srgb,std::less<dj::color::c_HVC>,std::allocator<std::pair<const dj::color::c_HVC,dj::color::c_srgb>>,false>>> b = munsell.mun_to_rgb_book.find(HVC);
    if( b != munsell.mun_to_rgb_book.end()) {
        c_srgb f = b->second;
        return f;
    } else {
        c_srgb ret;
        ret.r=ret.g=ret.b=0;
        return ret;
    }
}
1 голос
/ 31 октября 2008

Как уже рассказывал Алекс, auto используется в C ++ 0x для объявления типов в объявлениях инициализации, где тип выводится из кода инициализации.

Было предложено использовать его в качестве возвращаемого типа, где этот тип выводится из кода, возвращающего значение. Однако это породило неоднозначность, поэтому на момент написания статьи рассматривалось что-то более совместимое с лямбда-синтаксисом C ++ 0x.

1 голос
/ 31 октября 2008

Нет, предполагается, что если вы опустите спецификатор класса. Единственное разумное использование, которое я могу придумать, это привлечь внимание к определенной локальной переменной, которая переопределяет, скажем, глобальную переменную с тем же именем, или в качестве вопроса для интервью.

Скорее всего, вы запутаете бедного программиста, который застрял в поддержке кода!

...