Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/33: Рейтинг темы: голосов - 33, средняя оценка - 5.00
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
1

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

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

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

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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2010, 22:30
Ответы с готовыми решениями:

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

Одно из нововведений в .net 4.5 - portable class libraries: что это
Одно из нововведений в .net 4.5 - portable class libraries....

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

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

60
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
04.08.2010, 22:31 2
auto? O_O
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.08.2010, 22:33  [ТС] 3
neske, Ну да.
C++0x предлагает способ для смягчения этой проблемы. В новом стандарте значение ключевого слова auto будет заменено. Если раньше auto означало, что переменная создается в стеке, и подразумевалось неявно в случае, если вы не указали что-либо другое (register, к примеру), то теперь это аналог var в C# 3.0. Тип переменной, объявленной как auto, определяется компилятором самостоятельно на основе того, чем эта переменная инициализируется.
1
Эксперт С++
2347 / 1720 / 148
Регистрация: 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
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
04.08.2010, 22:38 5
Цитата Сообщение от Lavroff Посмотреть сообщение
Вопрос, есть-ли резон использовать так, или новый стандарт стоит использовать в меру?
зависит от того, на какие компиляторы собираешься переносить код.
хотя, все топовые компиляторы с++ уже поддерживают с++0х, хоть и частично, обратной дороги нет. все равно всем придется допиливать свои компиляторы. иначе уйдут в лету
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 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
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
04.08.2010, 22:44 7
Цитата Сообщение от fasked Посмотреть сообщение
там вроде такую фишку хотят продвинуть
эта "фишка" похожа на лямбда выражение.
пруфлинк пожалуйста.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
04.08.2010, 22:44 8
C++
1
2
3
4
template<T1, T2>
auto foo (T1 a, T2, b) {
  return (a * b);
}
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.08.2010, 22:45  [ТС] 9
CyBOSSeR, Да спасибо. Но все же, это нужно использовать. А есть-ли резон использовать там, где можно обойтись без, или же нет?

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

© fasked
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 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
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 22:48 12
Цитата Сообщение от fasked Посмотреть сообщение
там вроде такую фишку хотят продвинуть
Для возврата значения первый вариант предпочтительнее. Но если дело касается локальных переменных auto очень в тему.
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
04.08.2010, 22:50 13
Цитата Сообщение от niXman Посмотреть сообщение
эта "фишка" похожа на лямбда выражение.
в первом случае да, порождается лямбда, в которой возвращаемый тип тоже автоматически генерируется, если в ней существует тольки один return. во втором, который я чуть позже добавил используется как раз auto.
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 22:50 14
Цитата Сообщение от niXman Посмотреть сообщение
пруфлинк пожалуйста
Тут FAQ от Бъярна Страуструпа по C++0x. Про код, приведенный fasked конкретно здесь.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
04.08.2010, 22:55 16
Цитата Сообщение от Lavroff Посмотреть сообщение
Хм. У меня сие выдает ошибку типа функции.
ты забыл decltype.
C++
1
2
3
4
template<class T1, class T2>
auto foo (T1 a, T2 b) -> decltype(a*b) {
  return (a * b);
}
1
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 22:57 17
fasked, только auto здесь лишнее:
C++
1
2
3
4
template<class T1, class T2>
[] foo (T1 a, T2 b) -> decltype(a*b) {
  return (a * b);
}
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.08.2010, 22:57  [ТС] 18
fasked, Ну я про код neske говорил. А вот с decltype работает) Спасибо, интересно
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
04.08.2010, 22:58 19
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
только auto здесь лишнее
с auto тоже работает, два способа
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.08.2010, 22:59  [ТС] 20
CyBOSSeR, А меня такой способ в 10 ВС посылает...
0
04.08.2010, 22:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.08.2010, 22:59
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru