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

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

Войти
Регистрация
Восстановить пароль
 
 
ASCII
91 / 64 / 10
Регистрация: 15.12.2013
Сообщений: 415
Завершенные тесты: 2
#1

Особенности Visual Studio 2010 - C++

12.08.2014, 00:57. Просмотров 957. Ответов 27
Метки нет (Все метки)

Всем привет. Вопрос знатокам С/C++.

Мы знаем, что, взять например язык С:
1) Компилятор языка при присвоении одной переменной одного типа другой переменной другого типа, где возможна потеря данных не требует явного привидения типов, но выдаст предупреждение, хотя в такой же ситуации компилятор
С++ выдаст ошибку.

Вот например:

C++
1
2
3
4
5
6
/* Какой-то код */
// .. где-то внутри функции main
int *pdm;
// ...
pdm = malloc(100 * sizeof(int));
// ...
По идее компилятор С должен выдать предупреждение, однако компилируя этот код в VS2010 компилятор выдает мне ошибку и не компилирует.
Требует писать как в С++:
C++
1
pdm = (int *)malloc(100 * sizeof(int));
При этом файл назывался так - proc.c.

2) Еще один пример касаемо именно С++. При создании, если самому не определять конструктор, то его должен неявно определить компилятор, но если мы сами вручную его определяем, то именно он и должен работать...
Однако с точки зрения компилятора это почему-то не так...

C++
1
2
3
4
5
6
class T {
    int i;
public:
    T(int x) { i = x; }
    int get_i() { return i; }
};
Однако при таком объявлении класса, создать его объект таким образом представляется возможным:

C++
1
T test_obj;
То есть получается VS2010 сам еще неявно создает конструктор для неинициализированного объекта?
Спасибо за внимание!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2014, 00:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Особенности Visual Studio 2010 (C++):

Visual Studio 2010 - C++
Прошу прощения если написал не туда, отдельного форма по VS не нашел! Люди такая проблема!! У меня есть VS 2010 Ultimate начинаю...

c++, visual studio 2010! 7 - C++
Given three natural numbers a, b, c which represent the day, month and year of some date. For example: 1, 4, 1991 represents 1st April...

c++, visual studio 2010! 1. - C++
Given real numbers a, b, c, where a is not 0. Find if a quadratic inequality ах2 + bx + с = 0 has real roots. If it does, output them. If...

Visual Studio 2010 - C++
как запустить с флехи exe файл программы Си в Visual Studio 2010??

c++, visual studio 2010! 6. - C++
Given natural number n. Compute 2 to the power of n. Do not use pow() function. Example: Input: 5 Output: 32

Visual Studio 2010 - C++
Вот я пользуюсь Visual Studio 2010, может кто подсказать как в ней разробатывать интерфейс для програм. Можесть ссылка у кого на такой...

27
Vourhey
Почетный модератор
6490 / 2264 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
12.08.2014, 01:08 #2
Цитата Сообщение от ASCII Посмотреть сообщение
1) Компилятор языка при присвоении одной переменной одного типа другой переменной другого типа, где возможна потеря данных не требует явного привидения типов, но выдаст предупреждение, хотя в такой же ситуации компилятор
С++ выдаст ошибку.
В чем вопрос-то? Языки разные - С++ и С.
Цитата Сообщение от ASCII Посмотреть сообщение
C++
1
2
3
4
5
6
class T {
 int i;
public:
 T(int x) { i = x; }
 int get_i() { return i; }
};
Однако при таком объявлении класса, создать его объект таким образом представляется возможным:
C++
1
T test_obj;
Если это так, то это ошибка компилятора. В чем я сомневаюсь, поэтому делаю вывод, что это твоя ошибка.
0
ASCII
91 / 64 / 10
Регистрация: 15.12.2013
Сообщений: 415
Завершенные тесты: 2
12.08.2014, 01:16  [ТС] #3
Цитата Сообщение от ASCII Посмотреть сообщение
C++
1
2
3
4
5
6
/* Какой-то код */
// .. где-то внутри функции main
int *pdm;
// ...
pdm = malloc(100 * sizeof(int));
// ...
Короче говоря, в чистом С, такой код должен компилироваться, а в С++ - нет, в VS2010 он же не компилируется, хотя файл , а значит и запускаться должен компилятор языка С. Так вот почему так?
0
Vourhey
Почетный модератор
6490 / 2264 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
12.08.2014, 01:20 #4
Цитата Сообщение от ASCII Посмотреть сообщение
Так вот почему так?
Потому что у тебя что-то неверно сделано. Если создавать пустой проект и добавить туда файл .c, то все будет работать as expected и компилироваться будет сишным компилятором.
0
ASCII
91 / 64 / 10
Регистрация: 15.12.2013
Сообщений: 415
Завершенные тесты: 2
12.08.2014, 01:21  [ТС] #5
Цитата Сообщение от Vourhey Посмотреть сообщение
Если это так, то это ошибка компилятора. В чем я сомневаюсь, поэтому делаю вывод, что это твоя ошибка.
Ты сам то обрати внимание, где там может быть ошибка? Есть класс, в нем есть конструктор с 1 аргументом, однако можно создать объект этого класса неинициализированным. Проверь в VS2010 и убедишься... Так ведь не должно быть в стандарте С++ не так ведь. Во всех книгах которые я читал написано это.
0
gromo
372 / 271 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
12.08.2014, 01:21 #6
ASCII, касательно второго примера - ты определил конструктор, принимающий int, а проверяешь его , создавая объект класса T, не передавая ему в конструктор ничего. Сл-но вызывается неявно сгенерированный конструктор по умолчанию, а не твой с одним параметром типа int. Обычно такую экзотику надо явно засвидетельствовать, чтобы читающие твой код не впадали в замешательство:
C++
1
2
3
4
5
6
7
class T {
    int i;
public:
    T() = default; // <- вот так
    T(int x) { i = x; }
    int get_i() { return i; }
};
0
ASCII
91 / 64 / 10
Регистрация: 15.12.2013
Сообщений: 415
Завершенные тесты: 2
12.08.2014, 01:22  [ТС] #7
Цитата Сообщение от Vourhey Посмотреть сообщение
Потому что у тебя что-то неверно сделано. Если создавать пустой проект и добавить туда файл .c, то все будет работать as expected и компилироваться будет сишным компилятором.
Я так и делал, но результат такой, как я описал.
0
Vourhey
Почетный модератор
6490 / 2264 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
12.08.2014, 01:23 #8
Цитата Сообщение от gromo Посмотреть сообщение
Сл-но вызывается неявно сгенерированный конструктор по умолчанию, а не твой с одним параметром типа int.
Не должно быть никаких неявно сгенерированных конструкторов, когда есть конструктор с параметрами.

Добавлено через 45 секунд
Цитата Сообщение от ASCII Посмотреть сообщение
Я так и делал, но результат такой, как я описал.
Я делал так же когда-то, и все было ок.
1
gray_fox
What a waste!
1552 / 1257 / 74
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
12.08.2014, 01:23 #9
Цитата Сообщение от ASCII Посмотреть сообщение
хотя файл .с, а значит и запускаться должен компилятор языка С.
Можно "заставить" компилировать как С-код (опция -Tc вроде)
0
ASCII
91 / 64 / 10
Регистрация: 15.12.2013
Сообщений: 415
Завершенные тесты: 2
12.08.2014, 01:23  [ТС] #10
Цитата Сообщение от gromo Посмотреть сообщение
касательно второго примера - ты определил конструктор, принимающий int, а проверяешь его , создавая объект класса T, не передавая ему в конструктор ничего. Сл-но вызывается неявно сгенерированный конструктор по умолчанию, а не твой с одним параметром типа int.
Но в стандарте С++ сказано иначе. Грубо говоря стандарт говорит, если программист сам взялся за создание конструктора, то я(компилятор) за это больше не отвечаю, конструктор генерировать не буду, тк он(программист) сам его написал...
0
Vourhey
Почетный модератор
6490 / 2264 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
12.08.2014, 01:24 #11
Цитата Сообщение от ASCII Посмотреть сообщение
Проверь в VS2010 и убедишься...
Я знаю, что компилироваться пример не будет, зачем мне это лишний раз проверять.
0
Croessmah
Ушел
13777 / 8027 / 926
Регистрация: 27.09.2012
Сообщений: 19,777
Записей в блоге: 3
Завершенные тесты: 1
12.08.2014, 01:25 #12
Цитата Сообщение от ASCII Посмотреть сообщение
Но в стандарте С++ сказано иначе. Грубо говоря стандарт говорит, если программист сам взялся за создание конструктора, то я(компилятор) за это больше не отвечаю, конструктор генерировать не буду, тк он(программист) сам его написал...
Видимо, у Вас у одного такая ошибка, никогда такого не наблюдал. Да, нарывался на баги в студийном компиляторе, но не на такие.

P.S. Ничего там студия не компилирует
0
ASCII
91 / 64 / 10
Регистрация: 15.12.2013
Сообщений: 415
Завершенные тесты: 2
12.08.2014, 01:25  [ТС] #13
Цитата Сообщение от Vourhey Посмотреть сообщение
Я делал так же когда-то, и все было ок.
Я могу скинуть скрин.
Цитата Сообщение от Vourhey Посмотреть сообщение
Не должно быть никаких неявно сгенерированных конструкторов, когда есть конструктор с параметрами.
Наверное в микрософте считают иначе.
0
Vourhey
Почетный модератор
6490 / 2264 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
12.08.2014, 01:26 #14
Цитата Сообщение от ASCII Посмотреть сообщение
Я могу скинуть скрин.
Я тоже.
0
ASCII
91 / 64 / 10
Регистрация: 15.12.2013
Сообщений: 415
Завершенные тесты: 2
12.08.2014, 01:26  [ТС] #15
Странно однако... Ну ладно, благодарю всех за внимание!
0
12.08.2014, 01:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2014, 01:26
Привет! Вот еще темы с ответами:

Visual studio 2010 - C++
Господа, подскажите, где нужно полазить в опциях студии, чтобы после изменения программы она не запускала последний удачный дебаг? Заранее...

c++, visual studio 2010! 2. - C++
Given a year number. Output the number of days of that year. Example: Input: 1900 Output 365 Example:

visual studio expres 2010 - C++
Здраствуйте, подскажите пожалуйста как в microsoft visual studio expres 2010 к класу прибавить функцию?

Ошибка в visual studio 2010 c++ - C++
Доброго времени суток, друзья! У меня такая проблема, что при запуске программы vs10 выдает ошибку(см.скрин ниже). Знаю, что у многих...


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

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

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