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

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

04.08.2010, 22:30. Показов 6477. Ответов 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
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
07.12.2010, 23:43 41
Author24 — интернет-сервис помощи студентам
norge_goth, для использования фишек из c++0x при компиляции надо добавлять ключ -std=c++0x
Код
g++ main.cpp -std=c++0x
, чтобы узнать версию gcc
Код
gcc -v
1
62 / 62 / 13
Регистрация: 27.01.2009
Сообщений: 279
08.12.2010, 00:13 42
как-то оно не хочет, вроде и версия 4.4 gcc должна поддерживать авто переменные
Код
C:\Program_Files\Qt_dynamic\files_dynamic\Consol\C++2>gcc -v
Using built-in specs.
Target: mingw32
Configured with: ../gcc-4.4.0/configure --enable-languages=c,ada,c++,fortran,jav
a,objc,obj-c++ --disable-sjlj-exceptions --enable-shared --enable-libgcj --enabl
e-libgomp --with-dwarf2 --disable-win32-registry --enable-libstdcxx-debug --enab
le-version-specific-runtime-libs --prefix=/mingw --with-gmp=/mingw/src/gmp/root
--with-mpfr=/mingw/src/mpfr/root --build=mingw32
Thread model: win32
gcc version 4.4.0 (GCC)
а при попытке скомпилировать выше указанный исходник выдает:
Код
C:\Program_Files\Qt_dynamic\files_dynamic\Consol\C++2>g++ auto.cpp -std=c++0x
In file included from c:\program_files\qt\2010.02\mingw\bin\../lib/gcc/mingw32/4
.4.0/include/c++/bits/postypes.h:42,
                 from c:\program_files\qt\2010.02\mingw\bin\../lib/gcc/mingw32/4
.4.0/include/c++/iosfwd:42,
                 from c:\program_files\qt\2010.02\mingw\bin\../lib/gcc/mingw32/4
.4.0/include/c++/ios:39,
                 from c:\program_files\qt\2010.02\mingw\bin\../lib/gcc/mingw32/4
.4.0/include/c++/ostream:40,
                 from c:\program_files\qt\2010.02\mingw\bin\../lib/gcc/mingw32/4
.4.0/include/c++/iostream:40,
                 from auto.cpp:1:
c:\program_files\qt\2010.02\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/cwcha
r:159: error: '::swprintf' has not been declared
c:\program_files\qt\2010.02\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/cwcha
r:166: error: '::vswprintf' has not been declared
что эт может быть?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
08.12.2010, 00:51 43
Цитата Сообщение от norge_goth Посмотреть сообщение
вроде и версия 4.4 gcc
4.5 нужна, не меньше
Использование нововведений C++0x

код ваш без изменений
1
62 / 62 / 13
Регистрация: 27.01.2009
Сообщений: 279
08.12.2010, 02:07 44
Цитата Сообщение от easybudda Посмотреть сообщение
код ваш без изменений
спасибо, переустановил, получилось, вот только и при исполнении файла выводит тоже самое, но файл создается, в чем проблема?
Миниатюры
Использование нововведений C++0x  
0
62 / 62 / 13
Регистрация: 27.01.2009
Сообщений: 279
08.12.2010, 02:12 45
Цитата Сообщение от easybudda Посмотреть сообщение
4.5 нужна, не меньше
и еще хотелось бы спросить, а почему версия минимум 4.5?
вроде как тут http://gcc.gnu.org/gcc-4.4/cxx0x_status.html напротив auto-typed variables стоит Yes (то есть реализовано)

2. как можно задать чтобы не вводить каждый раз -enable-auto-import и по возможности -std=c++0x?
Спасибо
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
08.12.2010, 02:18 46
как можно задать чтобы не вводить каждый раз -enable-auto-import и по возможности -std=c++0x?
Спасибо
norge_goth, используй скрипты компиляции или make-файлы
1
Эксперт С++
3211 / 1459 / 74
Регистрация: 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
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
08.12.2010, 08:02 48
На самом деле самая большая плюшка нового стандарта - это vector<vector<int>>, две закрывающих скобки теперь не воспринимаются как оператор
А вообще много чего уже руки чешутся попробовать: С++0х потоки и синхронизации в действии, делегаты(в особенности асинхронные), variadic templates (это вообще жесть, для примера можно посмотреть std::tuple - кортеж данных, тоже очень классная плюшка), std::bind, std::function , принятые из буста, вообще незаменимые.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
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
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
08.12.2010, 08:30 50
Цитата Сообщение от taras atavin Посмотреть сообщение
А нафиг вообще объявлять переменные без явного указания их типа? Автор то их тип точно знает, а компил?

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

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

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

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

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

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

Не по теме:

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

0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
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
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.12.2010, 09:11 53
Цитата Сообщение от Maxwe11 Посмотреть сообщение
можно пример такой перегрузки?
Я написал, что нельзя, а ты просишь пример? Однако!
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
08.12.2010, 09:18 54
taras atavin, протупил.. самого очень интересует такая перегрузка, в АСМе все таки все многомерные массивы есть одомерными, по крайней мере для простых типов данных
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
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
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
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
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
08.12.2010, 11:15 59
Цитата Сообщение от taras atavin Посмотреть сообщение
поставь между >> пробел и скорми всё это старому компилу.

Не по теме:

Капитан?

0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2010, 11:36
Помогаю со студенческими работами здесь

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

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

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

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


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

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