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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.66
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
04.08.2010, 22:30     Использование нововведений C++0x #1
Красиво на самом деле... Вопрос, есть-ли резон использовать так, или новый стандарт стоит использовать в меру?

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
Посмотрите здесь:

C++ Использование this.
Использование функций C++
Использование циклов C++
использование getline C++
с++ Использование структур C++
Использование функций C++
C++ использование указателей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
07.12.2010, 23:43     Использование нововведений C++0x #41
norge_goth, для использования фишек из c++0x при компиляции надо добавлять ключ -std=c++0x
Код
g++ main.cpp -std=c++0x
, чтобы узнать версию gcc
Код
gcc -v
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
08.12.2010, 00:13     Использование нововведений C++0x #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
что эт может быть?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9384 / 5434 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
08.12.2010, 00:51     Использование нововведений C++0x #43
Цитата Сообщение от norge_goth Посмотреть сообщение
вроде и версия 4.4 gcc
4.5 нужна, не меньше
Использование нововведений C++0x
код ваш без изменений
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
08.12.2010, 02:07     Использование нововведений C++0x #44
Цитата Сообщение от easybudda Посмотреть сообщение
код ваш без изменений
спасибо, переустановил, получилось, вот только и при исполнении файла выводит тоже самое, но файл создается, в чем проблема?
Миниатюры
Использование нововведений C++0x  
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
08.12.2010, 02:12     Использование нововведений C++0x #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?
Спасибо
Nameless One
Эксперт С++
 Аватар для Nameless One
5759 / 3408 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
08.12.2010, 02:18     Использование нововведений C++0x #46
как можно задать чтобы не вводить каждый раз -enable-auto-import и по возможности -std=c++0x?
Спасибо
norge_goth, используй скрипты компиляции или make-файлы
niXman
Эксперт C++
 Аватар для niXman
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
08.12.2010, 02:34     Использование нововведений C++0x #47
Цитата Сообщение от norge_goth Посмотреть сообщение
вроде как тут http://gcc.gnu.org/gcc-4.4/cxx0x_status.html напротив auto-typed variables стоит Yes (то есть реализовано)
во дворе стоИт сарай. на нем написано х*й. но там дрова!
Manjak
 Аватар для Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
08.12.2010, 08:02     Использование нововведений C++0x #48
На самом деле самая большая плюшка нового стандарта - это vector<vector<int>>, две закрывающих скобки теперь не воспринимаются как оператор
А вообще много чего уже руки чешутся попробовать: С++0х потоки и синхронизации в действии, делегаты(в особенности асинхронные), variadic templates (это вообще жесть, для примера можно посмотреть std::tuple - кортеж данных, тоже очень классная плюшка), std::bind, std::function , принятые из буста, вообще незаменимые.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.12.2010, 08:29     Использование нововведений C++0x #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 Посмотреть сообщение
это что за батарея?
Как раз это давно есть и вполне понятно.
Manjak
 Аватар для Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
08.12.2010, 08:30     Использование нововведений C++0x #50
Цитата Сообщение от taras atavin Посмотреть сообщение
А нафиг вообще объявлять переменные без явного указания их типа? Автор то их тип точно знает, а компил?

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

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

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

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

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

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

Не по теме:

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

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

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

Не по теме:

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

taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.12.2010, 09:11     Использование нововведений C++0x #53
Цитата Сообщение от Maxwe11 Посмотреть сообщение
можно пример такой перегрузки?
Я написал, что нельзя, а ты просишь пример? Однако!
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.12.2010, 09:18     Использование нововведений C++0x #54
taras atavin, протупил.. самого очень интересует такая перегрузка, в АСМе все таки все многомерные массивы есть одомерными, по крайней мере для простых типов данных
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.12.2010, 09:28     Использование нововведений C++0x #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 вариантов даже без необходимости помнить, какой именно использован в декларации. Но полная синонимичность - тоже перебор.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
08.12.2010, 11:11  [ТС]     Использование нововведений C++0x #56
taras atavin,
C++
1
2
3
4
double & operator () (int i, int j)
  {
   return Items[i*Collumns+j];
  }
Сам ведь знаешь что это один из вариантов.
А про новый стандарт ты пишешь откровенную фигню. Что показывает, что ты просто его не понимаешь, хотя будешь использовать, сам даже того не замечая (если будешь писать на плюсах).
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.12.2010, 11:14     Использование нововведений C++0x #57
Цитата Сообщение от ForEveR Посмотреть сообщение
double & operator () (int i, int j)
Так разве можно? И как адресовать?
C++
1
2
TMatrix m(10,10);
m(2,4)=6.4;
?

Добавлено через 1 минуту
Цитата Сообщение от ForEveR Посмотреть сообщение
Что показывает, что ты просто его не понимаешь,
Так я и пишу, что не понимаю.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
08.12.2010, 11:15  [ТС]     Использование нововведений C++0x #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;
 
}
Manjak
 Аватар для Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
08.12.2010, 11:15     Использование нововведений C++0x #59
Цитата Сообщение от taras atavin Посмотреть сообщение
поставь между >> пробел и скорми всё это старому компилу.

Не по теме:

Капитан?

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2010, 11:36     Использование нововведений C++0x
Еще ссылки по теме:

Использование процедур* C++
C++ Использование функций
Использование строк C++
Использование классов C++
C++ Использование операции ++

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.12.2010, 11:36     Использование нововведений C++0x #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;
работает. Это они тоже будут фиксить новым стандартом? А по-моему проще вручную контролировать такие неоднозначности, компилом решаемые не туда.
Yandex
Объявления
08.12.2010, 11:36     Использование нововведений C++0x
Ответ Создать тему
Опции темы

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