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

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

Войти
Регистрация
Восстановить пароль
 
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
#1

Почему нет ошибки? - C++

19.03.2013, 20:04. Просмотров 418. Ответов 10
Метки нет (Все метки)

Добрый вечер.

В MS VC++ случайно написал нечто подобное:

C++
1
2
3
4
//...
int a, b, c;
//...
a = b; + c;
и скомпилировал. Самое странное, что мне не выдалось никакого сообщения об ошибке! Как это выражение понимать и что в компе в это время происходит?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2013, 20:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему нет ошибки? (C++):

Почему нет ошибки? - C++
Метод IsEmpty() класса указываю константным. Но в нем я изменяю состояние класса. Почему нет ошибки, а только предупреждение? ...

почему выскакивают ошибки - C++
Здравствуйте. Такая вот проблема: мой проект состоит из нескольких .срр файлов и одного .h файла. В .h файле находятся все глобальные...

Переполение массива - нет ошибки - C++
#include <iostream.h> #include <conio.h> int str_len(char a) { int L=0; while(a); return L-1; }

Почему компилятор выдаёт ошибки? - C++
Почему компилятор выдаёт ошибки? #include <iostream.h> #include <conio.h> Void main () { int a, b, c; std::cin >> a >> b...

ошибки которых на самом деле нет - C++
possible use of идентификатор before diffinotion(С++) у меня в компиляторе возникает такое предупреждение, хотя все переменные объявлены...

Ошибки вроде бы нет, но работает не правильно! - C++
Христос Воскресе! Вот код: #include <iostream> #include <conio.h> #include <clocale> #include <cstdlib> using namespace std;...

10
Croessmah
Эксперт CЭксперт С++
13514 / 7673 / 866
Регистрация: 27.09.2012
Сообщений: 18,891
Записей в блоге: 3
Завершенные тесты: 1
19.03.2013, 20:07 #2
C++
1
+ c
скорее всего вообще будет выкинуто из кода как бесполезный кусок



P.S. Хотите ошибку - напишите c+
1
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
19.03.2013, 20:14  [ТС] #3
А если написать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//...
int func(int *k)
{
(*k)++;
return 100500;
}
 
int main()
{
int a = 0, b = 7;
a = 5; + func(&b);
cout << a << "; " << b;
//...
}
то после выполнения b станет равным восьми значит, код не выбросился
0
fjay69
85 / 85 / 1
Регистрация: 26.10.2012
Сообщений: 248
19.03.2013, 20:18 #4
Компилятор принял + за унарную операцию. Есть унарный минус, который меняет знак числа. А есть унарный плюс, который ничего не делает
1
Croessmah
Эксперт CЭксперт С++
13514 / 7673 / 866
Регистрация: 27.09.2012
Сообщений: 18,891
Записей в блоге: 3
Завершенные тесты: 1
19.03.2013, 20:21 #5
Цитата Сообщение от Asker Посмотреть сообщение
значит, код не выбросился
Вызов функции естественно не выбросился, а ненужный "плюс" выкинули и всё.
1
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
19.03.2013, 20:25  [ТС] #6
А есть унарный плюс, который ничего не делает
Я понял. Вот только для чего он нужен?
0
Изображения
 
Croessmah
Эксперт CЭксперт С++
13514 / 7673 / 866
Регистрация: 27.09.2012
Сообщений: 18,891
Записей в блоге: 3
Завершенные тесты: 1
19.03.2013, 20:31 #7
Цитата Сообщение от Asker Посмотреть сообщение
Вот только для чего он нужен?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
class A{    
};
    const A & operator+(A & v){
        std::cout<<"Plus"<<std::endl;
        return v;
    }
    const A & operator-(A & v){
        std::cout<<"Minus"<<std::endl;
        return v;
    }
int main(){
    A a;
    +a;-a;
}
1
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
19.03.2013, 20:39  [ТС] #8
Я понял! можно перегружать унарный плюс для какого-нибудь класса и использовать его в своих целях (и писать, кстати, коротко:
C++
1
+a;
) хм, возьму на заметку

Все, разобрался
0
Kastaneda
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 2
Завершенные тесты: 1
19.03.2013, 21:22 #9
Цитата Сообщение от Asker Посмотреть сообщение
Я понял! можно перегружать унарный плюс для какого-нибудь класса и использовать его в своих целях
дело даже не в этом, если есть унарный минус, почему бы не существовать унарному плюсу?
0
Croessmah
19.03.2013, 21:29
  #10

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
почему бы не существовать унарному плюсу?
и унарному умножению
C++
1
*p

1
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.03.2013, 14:28 #11
На самом деле Kastaneda прав, по сути он нужен для симметричности операций. Ну и кроме того, он позволяет делать integral promotion:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <typeinfo>
 
int main()
{
    short s = 10;
    char c = 'c';
    
    std::cout << typeid(s).name() << std::endl;
    std::cout << typeid(c).name() << std::endl;
    std::cout << typeid(-s).name() << std::endl;
    std::cout << typeid(-c).name() << std::endl;
    std::cout << typeid(+s).name() << std::endl;
    std::cout << typeid(+c).name() << std::endl;
    
    return 0;
}
http://liveworkspace.org/code/1WntkO$0
1
22.03.2013, 14:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2013, 14:28
Привет! Вот еще темы с ответами:

Почему нет ошибок? - C++
Программа ведь не должна работать #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;map&gt; #include &lt;algorithm&gt; #include...

Почему нет return 0? - C++
Как я знаю в C++ функция int main() обязательно заканчивается return 0. Но в ниже приведенной программе этого нет и она работает, как это...

Почему нет звука? - C++
Ошибок нет, но и звука в колонках нет ... mciSendString((&quot;open sample.mp3 type mpegvideo alias &quot;),NULL,1,NULL); ...

Почему ошибки? Консольное приложение (MFC) - C++
Создал новый проект Win32, выбрал консольное приложение с MFC. У меня было стойкое ощущение того, что никаких ошибок быть не должно, но...


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

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

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