Форум программистов, компьютерный форум CyberForum.ru

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

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

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

04.08.2010, 22:30. Просмотров 4059. Ответов 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;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2010, 22:30     Использование нововведений C++0x
Посмотрите здесь:

Использование расширений формы и иных нововведений в 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, чтобы он смог использовать там все нововведения языка (лямбды и т.д.)....

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.08.2010, 23:00     Использование нововведений C++0x #21
Цитата Сообщение от Lavroff Посмотреть сообщение
А меня такой способ в 10 ВС посылает...
меня тоже посылает, видимо не допилили еще.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
04.08.2010, 23:03  [ТС]     Использование нововведений C++0x #22
Кстати это видимо тоже не полностью допилили

C++
1
2
3
4
template<class T1, class T2>
auto foo (T1 a, T2 b) -> decltype(a*b) {
  return (a * b);
}
Компилит, работает, но выделяет вызов функции в мейне красным и пишет внизу что типа ошибка) И тем не менее работает
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.08.2010, 23:06     Использование нововведений C++0x #23
Цитата Сообщение от Lavroff Посмотреть сообщение
Компилит, работает, но выделяет вызов функции в мейне красным и пишет внизу что типа ошибка) И тем не менее работает
да все впереди, тем более стандарт еще не принят.
мне вот еще очень понравилось наличие таких вещей как static_assert и nullptr.
neske
1479 / 846 / 75
Регистрация: 26.03.2010
Сообщений: 2,902
04.08.2010, 23:18     Использование нововведений C++0x #24
static_assert, тоже очень понравилось
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
04.08.2010, 23:44  [ТС]     Использование нововведений C++0x #25
Абсолютно не понял как использовать ссылку на временный объект (&&) и в каких случаях сие вообще возможно и нужно...
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 23:49     Использование нововведений C++0x #26
Lavroff, наиболее это необходимо для поверхностного копирования объекта, чтобы оптимизировать накладные расходы. rvalue references используются в основном конструкторами перемещения и присваиваниями перемещения. Подробнее здесь.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
05.08.2010, 00:09     Использование нововведений C++0x #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, то временный объект копируется в другой временный объект, в итоге два копирования вместо одного.
как-то запутанно я описал все
и скорее всего я ошибаюсь, поправьте меня, пожалуйста.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.08.2010, 00:24     Использование нововведений C++0x #28
Цитата Сообщение от fasked Посмотреть сообщение
видимо это позволяет избежать лишних копирований при создании новых временных объектов. таким образом перегружанная функция foo(string &&s) получает ссылку на объект, который был создан в функции bar(), если не перегружать функцию foo, то временный объект копируется в другой временный объект, в итоге два копирования вместо одного.
Да, по ходу, это второе применение rvalue references.
Цитата Сообщение от Бьярн Страуструп
Rvalue references can also be used to provide perfect forwarding.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.08.2010, 17:33  [ТС]     Использование нововведений C++0x #29
Написал две статьи по бытовому использованию С++0x:
Лямбда-функции
Авто и деклтайп

Может кому будет интересно)
easybudda
Эксперт С++
9458 / 5471 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
27.08.2010, 17:41     Использование нововведений C++0x #30
Цитата Сообщение от fasked Посмотреть сообщение
но раньше такой код был невозможен
C++
1
void foo(const string &s)
Вот так работает.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
27.08.2010, 18:28     Использование нововведений C++0x #31
Цитата Сообщение от Lavroff Посмотреть сообщение
Написал две статьи по бытовому использованию С++0x:
Лямбда-функции
Авто и деклтайп

Может кому будет интересно)
первое:
C++
1
2
    int Arr[] = {1,2,-1,-2,3,-3,4,-4,5,-5}; 
    std::vector<int> Vec(Arr, Arr+sizeof Arr/sizeof(Arr[0]));
это что за батарея?

второе:
C++
1
[&Sum, &Mult, &Sub](int Elem) {Sum+=Elem; Mult*=Elem; Sub-=Elem;}
в этом нет смысла. каптурь все.

Добавлено через 38 минут
Lavroff, ну так что с батареей? не поправишь?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.08.2010, 18:32  [ТС]     Использование нововведений C++0x #32
niXman, А в чем батарея не катит? Тут же описание исключительно лямбд, а не инициализации вектора без создания доп. массива
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
27.08.2010, 18:43     Использование нововведений C++0x #33
как-бы дело в том, что этот код, не совсем с++0х. это с++0х + Си
в с++0х контейнеры заполняются при инициализации так:
C++
1
std::vector<int> vec = {1,2,-1,-2,3,-3,4,-4,5,-5};
но это так, к сведению..
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.08.2010, 18:43  [ТС]     Использование нововведений C++0x #34
niXman, Да я это помнил. Просто вчера компиль начал ругаться на это по какой-то причине и я решил забить.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
27.08.2010, 18:44     Использование нововведений C++0x #35
Lavroff, а разве компиляторы уже поддерживают такую инициализацию?
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
27.08.2010, 18:50     Использование нововведений C++0x #36
Nameless One, конечно. еще с ноября
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
27.08.2010, 18:51     Использование нововведений C++0x #37
Цитата Сообщение от Nameless One Посмотреть сообщение
Lavroff, а разве компиляторы уже поддерживают такую инициализацию?
gcc 4.5 поддерживает, VS2010 ругается.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
27.08.2010, 18:52     Использование нововведений C++0x #38
fasked, теперь ясно, а то я вроде на msvs пробовал как-то, и не сканало...
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.08.2010, 21:32  [ТС]     Использование нововведений C++0x #39
fasked, Вот оно в чем дело. Тогда пробовал именно на VS
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2010, 23:11     Использование нововведений C++0x
Еще ссылки по теме:

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

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

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


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

Или воспользуйтесь поиском по форуму:
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
07.12.2010, 23:11     Использование нововведений C++0x #40
Народ, подскажите пожалуйста

захотел поюзать нововведения C+0x(то что реализовано), на сайте указано что в gcc4.5 лямбда ф-ции и auto-переменные уже реализованы, скачал и установил mingw4.5

в mingw4.5 цифры 4.5 указывают на версию gcc? то есть там компилятор версии gcc4.5?

Далее добавил переменную в окружение C:\MinGW\bin
попробовал скомпилить пример:
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;
}
и в ком. строке выбило ошибки мол переменные без типов и т.д

Что я не так сделал? буду рад любой помощи
Yandex
Объявления
07.12.2010, 23:11     Использование нововведений C++0x
Ответ Создать тему
Опции темы

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