2016-05-02 2 views
0

IIUC, я не могу использовать переменную auto как параметр функции с C++ 11, но это возможно с C++ 14.auto variable как параметр функции только с> C++ 11

Это правда?

Я считаю, что кто бы ни закрыл это неправильно - gcc-4.9 даже не совместим с C++ 11 и определенно не с C++ 14. Итак, как ответ полезен в этом случае?

+0

@Barry, Извините, вы ошиблись. gcc-4.9 даже не совместим с C++ 11, поэтому вы не можете решить проблему с указанной вами ссылкой. – Igor

+0

Вы должны прочитать ответы на связанный вопрос. Они отвечают на ваш вопрос (а ответ - нет). – Barry

ответ

0

В лямбда, да.

Выражение лямбда может использовать auto как тип параметра функции в C++ 14.

От сети разработчиков Microsoft Lambada Expressions C++

В C++ 14, если параметр типа является универсальным, вы можете использовать автоматическое ключевое слово как спецификатор типа. Это говорит компилятору о создании оператора вызова функции в качестве шаблона. Каждый экземпляр auto в списке параметров эквивалентен отдельному параметру типа.

auto y = [] (auto first, auto second) 
{ 
    return first + second; 
}; 

В С ++ 14, ISO C++, по-прежнему запрещает его в качестве общего параметра функции. Компилятор даст вам ошибки.

Одним словом, вы не можете использовать его в общих функциях. Вы можете использовать его только в лямбда-функции.

+0

нормально, поэтому я все еще не могу написать что-то вроде int MyClass :: Foo (auto param); правильно? он доступен только в лямбда? – Igor

+0

Если вы знаете, как использовать ламбады и указатели, вы можете обойти это. – DarmaniLink

+0

Боковое замечание: от того, как вы это сформулировали, это звучало так, будто вы используете авто везде, где можете. Я бы прочитал [это] (http://stackoverflow.com/questions/6434971/how-much-is-too-much-with-c11-auto-keyword), чтобы получить общее представление о том, насколько беспорядочным может быть авто. Это довольно ново, поэтому у него есть свои проблемы. – DarmaniLink

Смежные вопросы