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

Цикл For, Разница между знаками - C++

Восстановить пароль Регистрация
 
muryj
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 6
04.06.2013, 20:56     Цикл For, Разница между знаками #1
Первый вариант:
for(int i(0); i < N; i++)
Второй вариант:
for(int i = 0 ; i < N; i++)
Оба варианта работают идентично, но препод придрался к записи "(0)" в первом варианте и теперь заставляет узнать, почему так, ибо сам он видит подобное первый раз в жизни. Что скажете? Желательно со ссылками на какую-нибудь книгу.
Вот код программы:
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
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
 setlocale(LC_ALL , "Russian");
 int N;
 cout << "Введите размер матрицы ";
 cin >> N;
 int **Matrix = new int*[N];
  for(int i(0); i < N; i++)
   Matrix[i] = new int[N];
 
 cout << "Заполните матрицу " << N << "x" << N << "\n";
 
 for(int i(0); i < N; i++)
  for(int j(0); j < N; j++)
  {
   cin >> Matrix[i][j];
  }
 
 bool Triugolnay = true;
 for(int i(0); i < N; i++)
  for(int j(1); j < i; j++)
  {
   if(Matrix[i][j] != 0)
   {
    Triugolnay = false;
    break;
   }
  }
 
 if(Triugolnay)
  cout << "Матрица нижне-треугольная\n";
 else cout << "Матрица не нижне-треугольная\n";
 
 
 for(int i(0); i < N;i++)
  delete [] Matrix[i];
 delete [] Matrix;
 _getch();
 return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2013, 20:56     Цикл For, Разница между знаками
Посмотрите здесь:

Разница между i++ и ++i.Си C++
C++ Разница между 0 и 00 ?
В чем разница между С и С++ C++
вчем разница между с++ и ++с C++
C++ Разница между != и <=
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
04.06.2013, 21:02     Цикл For, Разница между знаками #2
Цитата Сообщение от muryj Посмотреть сообщение
но препод придрался к записи "(0)"
лолс, что это за препод такой, раз не знает альтернативный вариант инициализации.
muryj
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 6
04.06.2013, 21:06  [ТС]     Цикл For, Разница между знаками #3
Не будем называть имена
А можете источник дать?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
04.06.2013, 21:15     Цикл For, Разница между знаками #4
в данном случае разницы никакой потому, что int - это простой тип который не обладает нетривиальным конструктором.
C++
1
2
int i = 0;//1
int i(0);//2
Что в случае 1, что в 2 создается целочисленный литерал и потом i инициализируется им. В современным компиляторах происходит оптимизация, которая сходу создает инициализированный int.

Добавлено через 4 минуты
Надеюсь я привел корректный пример. Если нет, то поправьте кто-нибудь.
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
#include <iostream>
 
using std::cout;
 
struct Foo
{
    int x;
    Foo(): x(0) { cout << "Default constructor\n"; }
    explicit Foo(int a): x(a) { cout << "Simple constructor\n"; }
    Foo(const Foo &obj): x(obj.x) { cout << "Copy\n"; }
    Foo& operator = (const Foo &obj)
    {
        if (this == &obj) return *this;
        x = obj.x;
        cout << "operator =\n";
        return *this;
    }
};
 
int main()
{
    Foo x1 = Foo(5);//с оптимизацией компилятора: simple, без - simple->copy
    Foo x2(5); //simple
    return 0;
}
tony_pershin
16 / 16 / 1
Регистрация: 05.03.2013
Сообщений: 36
04.06.2013, 21:22     Цикл For, Разница между знаками #5
Сия фича называется explicit type conversion. Преподу можешь показать ссылку на msdn: http://msdn.microsoft.com/ru-ru/libr...v=vs.100).aspx
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
04.06.2013, 21:43     Цикл For, Разница между знаками #6
Цитата Сообщение от tony_pershin Посмотреть сообщение
Сия фича называется explicit type conversion. Преподу можешь показать ссылку на msdn: http://msdn.microsoft.com/ru-ru/libr...v=vs.100).aspx
Это не совсем то. По ссылке другая допустимая форма записи привидения типов. Т.е. язык допускает
C++
1
std::cout << (int)'a';
а так же
C++
1
std::cout << int('a');
вот.
А в примере ТС'а немного другое - это форма инициализации скалярных типов с помощью синтаксиса вызова конструктора. Б.Эккель в книге "Философия С++" называет это "псевдоконструктор". Но термин спорный, т.к. никакого конструктора не вызывается, даже "псевдо".
Могу предположить, что этот "псевдоконструктор" понадобился в языке например для таких вещей
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <class T>
class Foo
{
public:
    Foo() 
    {
        bar = T();
    }
 
    T bar;
};
...
Foo<int> baz;
хотя может у этого есть другое объяснение, а может его и вовсе нет, добавили просто для синтаксической совместимости с пользовательскими типами.

Добавлено через 1 минуту
Цитата Сообщение от Kastaneda Посмотреть сообщение
По ссылке другая допустимая форма записи привидения типов.
там же даже написано
Explicit type conversions can also be specified using the "cast" syntax. The previous example, rewritten using the cast syntax, is:
C++
1
d = (float)i;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2013, 21:47     Цикл For, Разница между знаками
Еще ссылки по теме:

C++ Разница между С и С++
C++ В чем разница между X x; и X x()?
C++ В чем разница между [] и * ?

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

Или воспользуйтесь поиском по форуму:
tony_pershin
16 / 16 / 1
Регистрация: 05.03.2013
Сообщений: 36
04.06.2013, 21:47     Цикл For, Разница между знаками #7
Kastaneda, интересная штука, не знал про это, спасибо.
Yandex
Объявления
04.06.2013, 21:47     Цикл For, Разница между знаками
Ответ Создать тему
Опции темы

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