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

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

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

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

04.08.2010, 22:30. Просмотров 4287. Ответов 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
fasked
Эксперт С++
4975 / 2555 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
CyBOSSeR
Эксперт С++
2309 / 1682 / 86
Регистрация: 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
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
04.08.2010, 22:57  [ТС] #18
fasked, Ну я про код neske говорил. А вот с decltype работает) Спасибо, интересно
0
fasked
Эксперт С++
4975 / 2555 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.08.2010, 22:58 #19
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
только auto здесь лишнее
с auto тоже работает, два способа
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
04.08.2010, 22:59  [ТС] #20
CyBOSSeR, А меня такой способ в 10 ВС посылает...
0
fasked
Эксперт С++
4975 / 2555 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.08.2010, 23:00 #21
Цитата Сообщение от Lavroff Посмотреть сообщение
А меня такой способ в 10 ВС посылает...
меня тоже посылает, видимо не допилили еще.
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
04.08.2010, 23:03  [ТС] #22
Кстати это видимо тоже не полностью допилили

C++
1
2
3
4
template<class T1, class T2>
auto foo (T1 a, T2 b) -> decltype(a*b) {
  return (a * b);
}
Компилит, работает, но выделяет вызов функции в мейне красным и пишет внизу что типа ошибка) И тем не менее работает
0
fasked
Эксперт С++
4975 / 2555 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.08.2010, 23:06 #23
Цитата Сообщение от Lavroff Посмотреть сообщение
Компилит, работает, но выделяет вызов функции в мейне красным и пишет внизу что типа ошибка) И тем не менее работает
да все впереди, тем более стандарт еще не принят.
мне вот еще очень понравилось наличие таких вещей как static_assert и nullptr.
0
neske
1524 / 891 / 89
Регистрация: 26.03.2010
Сообщений: 3,064
04.08.2010, 23:18 #24
static_assert, тоже очень понравилось
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
04.08.2010, 23:44  [ТС] #25
Абсолютно не понял как использовать ссылку на временный объект (&&) и в каких случаях сие вообще возможно и нужно...
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 23:49 #26
Lavroff, наиболее это необходимо для поверхностного копирования объекта, чтобы оптимизировать накладные расходы. rvalue references используются в основном конструкторами перемещения и присваиваниями перемещения. Подробнее здесь.
1
fasked
Эксперт С++
4975 / 2555 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
05.08.2010, 00:09 #27
не знаю насколько это по теме, но раньше такой код был невозможен:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
 
using namespace std;
 
void foo(string &s)
{
    cout << s << endl;
}
 
string bar()
{
    return "string";
}
 
int main()
{
    foo(bar());
 
    system("PAUSE");
    return 0;
}
Код
error: invalid initialization of non-const reference of type 'std::string&' from a temporary of type 'std::string'
по новому стандарту проходит. при чем, если добавить еще одну функцию.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <string>
 
using namespace std;
 
void foo(string &s)
{
    cout << s << endl;
}
 
void foo(string &&s)
{
    cout << "&&" << s << endl;
}
 
string bar()
{
    return "string";
}
 
int main()
{
    foo(bar());
 
    system("PAUSE");
    return 0;
}
то срабатывает именно вторая. со ссылкой на временной объект.
видимо это позволяет избежать лишних копирований при создании новых временных объектов. таким образом перегружанная функция foo(string &&s) получает ссылку на объект, который был создан в функции bar(), если не перегружать функцию foo, то временный объект копируется в другой временный объект, в итоге два копирования вместо одного.
как-то запутанно я описал все
и скорее всего я ошибаюсь, поправьте меня, пожалуйста.
1
CyBOSSeR
Эксперт С++
2309 / 1682 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.08.2010, 00:24 #28
Цитата Сообщение от fasked Посмотреть сообщение
видимо это позволяет избежать лишних копирований при создании новых временных объектов. таким образом перегружанная функция foo(string &&s) получает ссылку на объект, который был создан в функции bar(), если не перегружать функцию foo, то временный объект копируется в другой временный объект, в итоге два копирования вместо одного.
Да, по ходу, это второе применение rvalue references.
Цитата Сообщение от Бьярн Страуструп
Rvalue references can also be used to provide perfect forwarding.
1
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
27.08.2010, 17:33  [ТС] #29
Написал две статьи по бытовому использованию С++0x:
Лямбда-функции
Авто и деклтайп

Может кому будет интересно)
1
easybudda
Модератор
Эксперт CЭксперт С++
10020 / 5943 / 1004
Регистрация: 25.07.2009
Сообщений: 11,230
27.08.2010, 17:41 #30
Цитата Сообщение от fasked Посмотреть сообщение
но раньше такой код был невозможен
C++
1
void foo(const string &s)
Вот так работает.
0
27.08.2010, 17:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2010, 17:41
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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