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

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

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

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

04.08.2010, 22:30. Просмотров 4146. Ответов 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
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
08.12.2010, 02:18 #46
как можно задать чтобы не вводить каждый раз -enable-auto-import и по возможности -std=c++0x?
Спасибо
norge_goth, используй скрипты компиляции или make-файлы
1
niXman
Эксперт С++
3138 / 1450 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
08.12.2010, 02:34 #47
Цитата Сообщение от norge_goth Посмотреть сообщение
вроде как тут http://gcc.gnu.org/gcc-4.4/cxx0x_status.html напротив auto-typed variables стоит Yes (то есть реализовано)
во дворе стоИт сарай. на нем написано х*й. но там дрова!
1
Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
08.12.2010, 08:02 #48
На самом деле самая большая плюшка нового стандарта - это vector<vector<int>>, две закрывающих скобки теперь не воспринимаются как оператор
А вообще много чего уже руки чешутся попробовать: С++0х потоки и синхронизации в действии, делегаты(в особенности асинхронные), variadic templates (это вообще жесть, для примера можно посмотреть std::tuple - кортеж данных, тоже очень классная плюшка), std::bind, std::function , принятые из буста, вообще незаменимые.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.12.2010, 08:29 #49
Цитата Сообщение от ForEveR Посмотреть сообщение
auto n=5.483, m=3.323;
А нафиг вообще объявлять переменные без явного указания их типа? Автор то их тип точно знает, а компил?
Цитата Сообщение от ForEveR Посмотреть сообщение
decltype(Sum(n,m)) sum=Sum(n,m);
Сам Страуструп не поймёт, что здесь имелось ввиду.
Цитата Сообщение от ForEveR Посмотреть сообщение
std::cout<<sum<<'\n';
А это давно есть.
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
2. Если тип выражения заранее не известен:
Если у тебя это возможно, то ты точно не способен писать нормальный софт.
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
1. Если тип переменной имеет очень большую длину и можно запутаться:
Костыли под неудачные имена типов - нейтральное свойство, так как в любом случае надо избегать самих таких типов.
Цитата Сообщение от fasked Посмотреть сообщение
[] (T1 a, T2 b)
Куда эзотеричнее?

Добавлено через 3 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
Абсолютно не понял как использовать ссылку на временный объект (&&) и в каких случаях сие вообще возможно и нужно...
Внутри. А при возврате подобных значений превращается в наглядное пособие, как делать не надо.

Добавлено через 1 минуту
Цитата Сообщение от niXman Посмотреть сообщение
это что за батарея?
Как раз это давно есть и вполне понятно.
0
Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
08.12.2010, 08:30 #50
Цитата Сообщение от taras atavin Посмотреть сообщение
А нафиг вообще объявлять переменные без явного указания их типа? Автор то их тип точно знает, а компил?

Сам Страуструп не поймёт, что здесь имелось ввиду.

А это давно есть.
Если у тебя это возможно, то ты точно не способен писать нормальный софт.

Костыли под неудачные имена типов - нейтральное свойство, так как в любом случае надо избегать самих таких типов.

Куда эзотеричнее?

Добавлено через 3 минуты

Внутри. А при возврате подобных значений превращается в наглядное пособие, как делать не надо.
Познакомься сначала, приблизительно хотябы, с обобщенным программированием, а уж потом рассуждай.

Не по теме:

Даже ничего адекватного в ответ на такую чушь в голову не приходит

0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.12.2010, 09:04 #51
Цитата Сообщение от Manjak Посмотреть сообщение
На самом деле самая большая плюшка нового стандарта - это vector<vector<int>>
поставь между >> пробел и скорми всё это старому компилу.

Добавлено через 32 минуты
В существующем стандарте не очень удобно то, что нельзя перегрузить
C++
1
... & operator [] (int i, int j);
C++
1
... & operator [] (int i, int j, int k);
и тому подобные операторы. Я конечно понимаю, что многомерный массив есть массива массивов, но если он ещё и динамический, то получается динамический массив динамических массивов. А теперь прикиньте: при этом он должен ещё иметь следующее свойство: диапазоны допустимых значений одних индексов не зависят от конкретных значений других. И + ещё сами элементы во всех массивах должны иметь определённое общее значение какого нибудь поля. Ну ка попробуйте навскидку хотябы задекларировать такой массив, да ещё оптимально! А уж реализация...! А если можно было бы сделать многомерный массив не через массив массивов, то можно в операторе индексации возвращать сразу элемент вместо промежуточного массива, что намного проще выглядит. Так вот, мне интересно, будет ли когда нибудь в с++, или его потомке такая возможность.
0
Jupiter
08.12.2010, 09:09
  #52

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
В существующем стандарте не очень удобно то, что нельзя перегрузить
C++
1
... & operator [] (int i, int j);
можно пример такой перегрузки?

0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.12.2010, 09:11 #53
Цитата Сообщение от Maxwe11 Посмотреть сообщение
можно пример такой перегрузки?
Я написал, что нельзя, а ты просишь пример? Однако!
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.12.2010, 09:18 #54
taras atavin, протупил.. самого очень интересует такая перегрузка, в АСМе все таки все многомерные массивы есть одомерными, по крайней мере для простых типов данных
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.12.2010, 09:28 #55
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
28
29
30
31
32
33
34
classs TMatrix
{
 protected:
  double *items;
  int        rows;
  int        collumns;
 public:
  TMatrix ()
  {
   rows=0;
   collumns=0;
   Items=NULL;
  }
  TMatrix (int Rows, int Collumns)
  {
   rows=Rows;
   collumns=Collumns;
   Items=new doule [Rows*Collumns];
  }
  void ReSize(int Rows, int Collumns)
  {
   rows=Rows;
   collumns=Collumns;
   if (Items)
   {
    delete [] Items;
   }
   Items=new doule [Rows*Collumns];
  }
  double & operator [] (int i, int j)
  {
   return Items[i*Collumns+j];
  }  
};
Ну ка приведите это в соответствии со стандартом!

Добавлено через 9 минут
Цитата Сообщение от Maxwe11 Посмотреть сообщение
taras atavin, протупил.. самого очень интересует такая перегрузка, в АСМе все таки все многомерные массивы есть одомерными, по крайней мере для простых типов данных
Так то асм. А на паскале многомерный массив есть синоним массива массивов. То есть, не зависимо от того, как именно он объявлен, адресовать его можно и как массив полной размерности, и как массив массивов. Причём, например, трёхмерный адресуется и как трёхмерный, и как двумерный массив одномерных массивов, и как одномерный массив двумерных массивов и как одномерный массив одномерных массивов одномерных массивов. А четырёхмерный можно адресовать:
1 как четырёхмерный массив элементов,
2 как трёхмерный массив одномерных массивов элементов,
3 как двумерный массив двумерных массивов элементов,
4 как двумерный массив одномерных массивов одномерных массивов элементов,
5 как одномерный массив трёхмерных массивов элементов,
6 как одномерный массив двумерных массивов одномерных массивов элементов,
7 как одномерный массив одномерных массивов двумерных массивов элементов,
8 как одномерный массив одномерных массивов одномерных массивов одномерных массивов элементов.
8 вариантов даже без необходимости помнить, какой именно использован в декларации. Но полная синонимичность - тоже перебор.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
08.12.2010, 11:11  [ТС] #56
taras atavin,
C++
1
2
3
4
double & operator () (int i, int j)
  {
   return Items[i*Collumns+j];
  }
Сам ведь знаешь что это один из вариантов.
А про новый стандарт ты пишешь откровенную фигню. Что показывает, что ты просто его не понимаешь, хотя будешь использовать, сам даже того не замечая (если будешь писать на плюсах).
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.12.2010, 11:14 #57
Цитата Сообщение от ForEveR Посмотреть сообщение
double & operator () (int i, int j)
Так разве можно? И как адресовать?
C++
1
2
TMatrix m(10,10);
m(2,4)=6.4;
?

Добавлено через 1 минуту
Цитата Сообщение от ForEveR Посмотреть сообщение
Что показывает, что ты просто его не понимаешь,
Так я и пишу, что не понимаю.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
08.12.2010, 11:15  [ТС] #58
taras atavin, Ой-ли? Скомпиль ка на любой студии. Именно так
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
 
class TMatrix
{
 protected:
  double *items;
  int        rows;
  int        collumns;
 public:
  TMatrix ()
  {
   rows=0;
   collumns=0;
   items=NULL;
  }
  TMatrix (int Rows, int Collumns)
  {
   rows=Rows;
   collumns=Collumns;
   items=new double [Rows*Collumns];
  }
  void ReSize(int Rows, int Collumns)
  {
   rows=Rows;
   collumns=Collumns;
   if (items)
   {
    delete [] items;
   }
   items=new double [Rows*Collumns];
  }
  double & operator () (int i, int j)
  {
   return items[i*collumns+j];
  }  
};
 
int main()
{
    TMatrix Matr(3, 3);
    Matr(2,2)=55;
    std::cout<<Matr(2,2)<<'\n';
    return 0;
 
}
0
Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
08.12.2010, 11:15 #59
Цитата Сообщение от taras atavin Посмотреть сообщение
поставь между >> пробел и скорми всё это старому компилу.

Не по теме:

Капитан?

0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.12.2010, 11:36 #60
Цитата Сообщение от ForEveR Посмотреть сообщение
если будешь писать на плюсах
У меня мечта: плюнуть на все стандарты и сделать свои среду и компил под язык, похожий на c++, но с отсебятиной.

Добавлено через 20 минут
Кстати,
C++
1
2
3
4
5
double x,*y,z;
y=&z;
cin>>x;
cin>>z;
cout<<x/*y;
не работает, а
C++
1
2
3
4
5
double x,*y,z;
y=&z;
cin>>x;
cin>>z;
cout<<x/ *y;
работает. Это они тоже будут фиксить новым стандартом? А по-моему проще вручную контролировать такие неоднозначности, компилом решаемые не туда.
0
08.12.2010, 11:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2010, 11:36
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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