С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.66
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
#1

Использование нововведений C++0x - C++

04.08.2010, 22:30. Просмотров 4191. Ответов 60
Метки нет (Все метки)

Красиво на самом деле... Вопрос, есть-ли резон использовать так, или новый стандарт стоит использовать в меру?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
template <typename T>
T Sum(T n, T m)
{
    return n+m;
}
 
int main()
{
    auto n=5.483, m=3.323;
    decltype(Sum(n,m)) sum=Sum(n,m);
    std::cout<<sum<<'\n';
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2010, 22:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование нововведений C++0x (C++):

Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя. - C++
Помогите пожалуйста!!!!!!! Сделать три варианта: первый вариант – передача данных между функциями с помощью глобального...

Использование строк.Использование структур - C++
Задачка: Дана строка,состоящая из групп нулей и едениц. Найти и вывести на экран группы с нечетным количеством символов. И еще одна: ...

C/C++ Использование функций, использование break - C++
Здравствуйте. Не знал как назвать тему, боялся что, если назову &quot;КАК ЭТО РАБОТАЕТ?&quot; то её удалят. Пишу программу для вычисления длинных...

Использование расширений формы и иных нововведений в 1С - 1С
Добрый день, уважаемые форумчане. Имеется задача - создать собственное тиражируемое решение на базе типового. И возникает куча вопросов...

Одно из нововведений в .net 4.5 - portable class libraries: что это - .NET
Одно из нововведений в .net 4.5 - portable class libraries. http://msdn.microsoft.com/en-us/library/gg597391(v=vs.110).aspx Кто...

Придумать сложное задание для Java 8 с использованием нововведений языка - Java SE
Знакомый попросил дать какое-нибудь серьезное задание на java 8, чтобы он смог использовать там все нововведения языка (лямбды и т.д.)....

60
neske
1505 / 872 / 84
Регистрация: 26.03.2010
Сообщений: 2,987
04.08.2010, 22:31 #2
auto? O_O
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
04.08.2010, 22:33  [ТС] #3
neske, Ну да.
C++0x предлагает способ для смягчения этой проблемы. В новом стандарте значение ключевого слова auto будет заменено. Если раньше auto означало, что переменная создается в стеке, и подразумевалось неявно в случае, если вы не указали что-либо другое (register, к примеру), то теперь это аналог var в C# 3.0. Тип переменной, объявленной как auto, определяется компилятором самостоятельно на основе того, чем эта переменная инициализируется.
1
CyBOSSeR
Эксперт С++
2305 / 1675 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 22:37 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Lavroff Посмотреть сообщение
Вопрос, есть-ли резон использовать так, или новый стандарт стоит использовать в меру?
auto нужно использовать в основном в двух случаях:
1. Если тип переменной имеет очень большую длину и можно запутаться:
C++
1
std::map<std::string, std::vector<std::pair<int, std::vector<std::string>>>>::const_iterator it;
2. Если тип выражения заранее не известен:
C++
1
2
3
4
template<T1, T2>
void foo(T1 a, T2 b) {
  ??? c = a * b;
}
6
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
04.08.2010, 22:38 #5
Цитата Сообщение от Lavroff Посмотреть сообщение
Вопрос, есть-ли резон использовать так, или новый стандарт стоит использовать в меру?
зависит от того, на какие компиляторы собираешься переносить код.
хотя, все топовые компиляторы с++ уже поддерживают с++0х, хоть и частично, обратной дороги нет. все равно всем придется допиливать свои компиляторы. иначе уйдут в лету
0
fasked
Эксперт С++
4952 / 2532 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.08.2010, 22:41 #6
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
2. Если тип выражения заранее не известен:
там вроде такую фишку хотят продвинуть
C++
1
2
3
4
5
template <typename T1, typename T2>
[] (T1 a, T2 b) -> decltype(a + b)
{
   return a + b;
}
либо так
C++
1
2
3
4
5
template <typename T1, typename T2>
auto (T1 a, T2 b) -> decltype(a + b)
{
   return a + b;
}
0
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
04.08.2010, 22:44 #7
Цитата Сообщение от fasked Посмотреть сообщение
там вроде такую фишку хотят продвинуть
эта "фишка" похожа на лямбда выражение.
пруфлинк пожалуйста.
0
neske
1505 / 872 / 84
Регистрация: 26.03.2010
Сообщений: 2,987
04.08.2010, 22:44 #8
C++
1
2
3
4
template<T1, T2>
auto foo (T1 a, T2, b) {
  return (a * b);
}
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
04.08.2010, 22:45  [ТС] #9
CyBOSSeR, Да спасибо. Но все же, это нужно использовать. А есть-ли резон использовать там, где можно обойтись без, или же нет?

Добавлено через 22 секунды
neske, не-а.. так вот не покатит вроде. Онли для типов переменных, но не возвращаемого значения функции
Так что такой код выдает ошибку - 1>error C3551: требуется завершающий возвращаемый тип
1
neske
1505 / 872 / 84
Регистрация: 26.03.2010
Сообщений: 2,987
04.08.2010, 22:47 #10
Покатит, http://habrahabr.ru/blogs/cpp/89494/

© fasked
0
fasked
Эксперт С++
4952 / 2532 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.08.2010, 22:48 #11
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Если тип переменной имеет очень большую длину и можно запутаться:
например вот такой код отлично отрабатывает хотя пример не самый удачный.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
int main()
{
    std::vector<int> v;
    std::generate_n(std::back_inserter(v), 10, []{ return std::rand() % 9; });
 
    for(auto it = v.begin(); it != v.end(); ++it)
        std::cout << *it << " ";
 
    return 0;
}
0
CyBOSSeR
Эксперт С++
2305 / 1675 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 22:48 #12
Цитата Сообщение от fasked Посмотреть сообщение
там вроде такую фишку хотят продвинуть
Для возврата значения первый вариант предпочтительнее. Но если дело касается локальных переменных auto очень в тему.
0
fasked
Эксперт С++
4952 / 2532 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.08.2010, 22:50 #13
Цитата Сообщение от niXman Посмотреть сообщение
эта "фишка" похожа на лямбда выражение.
в первом случае да, порождается лямбда, в которой возвращаемый тип тоже автоматически генерируется, если в ней существует тольки один return. во втором, который я чуть позже добавил используется как раз auto.
0
CyBOSSeR
Эксперт С++
2305 / 1675 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 22:50 #14
Цитата Сообщение от niXman Посмотреть сообщение
пруфлинк пожалуйста
Тут FAQ от Бъярна Страуструпа по C++0x. Про код, приведенный fasked конкретно здесь.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
04.08.2010, 22:53  [ТС] #15
C++
1
2
3
4
template<class T1, class T2>
auto foo (T1 a, T2 b) {
  return (a * b);
}
Хм. У меня сие выдает ошибку типа функции.
0
04.08.2010, 22:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2010, 22:53
Привет! Вот еще темы с ответами:

Создание и использование своих @NamedQueries. Использование EntityManager - Java EE
Добрый день! Создавал классы сущностей и сессий через NetBeans генераторы кода. Использование стандартных...

Задачи на использование событий. Осуществить использование событий в программе с применением синтаксиса обработчика, рекомендованного для среды NET Fr - C#
NET Framework. Программа для поиска простых чисел среди чисел Фибоначчи. При нахождении очередного простого числа активировать событие...

Использование конструкторов. Перегрузка конструкторов. Использование свойств - C#
Помогите реализовать свойства, позволяющие осуществить проверку на допустимые значения для данных класса. using System; using...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов - C++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.