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

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

Восстановить пароль Регистрация
 
Asker
114 / 102 / 11
Регистрация: 18.12.2010
Сообщений: 378
19.03.2013, 20:04     Почему нет ошибки? #1
Добрый вечер.

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

C++
1
2
3
4
//...
int a, b, c;
//...
a = b; + c;
и скомпилировал. Самое странное, что мне не выдалось никакого сообщения об ошибке! Как это выражение понимать и что в компе в это время происходит?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,889
Записей в блоге: 2
Завершенные тесты: 1
19.03.2013, 20:07     Почему нет ошибки? #2
C++
1
+ c
скорее всего вообще будет выкинуто из кода как бесполезный кусок



P.S. Хотите ошибку - напишите c+
Asker
114 / 102 / 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 станет равным восьми значит, код не выбросился
fjay69
 Аватар для fjay69
85 / 85 / 1
Регистрация: 26.10.2012
Сообщений: 248
19.03.2013, 20:18     Почему нет ошибки? #4
Компилятор принял + за унарную операцию. Есть унарный минус, который меняет знак числа. А есть унарный плюс, который ничего не делает
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,889
Записей в блоге: 2
Завершенные тесты: 1
19.03.2013, 20:21     Почему нет ошибки? #5
Цитата Сообщение от Asker Посмотреть сообщение
значит, код не выбросился
Вызов функции естественно не выбросился, а ненужный "плюс" выкинули и всё.
Asker
114 / 102 / 11
Регистрация: 18.12.2010
Сообщений: 378
19.03.2013, 20:25  [ТС]     Почему нет ошибки? #6
А есть унарный плюс, который ничего не делает
Я понял. Вот только для чего он нужен?
Изображения
 
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,889
Записей в блоге: 2
Завершенные тесты: 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;
}
Asker
114 / 102 / 11
Регистрация: 18.12.2010
Сообщений: 378
19.03.2013, 20:39  [ТС]     Почему нет ошибки? #8
Я понял! можно перегружать унарный плюс для какого-нибудь класса и использовать его в своих целях (и писать, кстати, коротко:
C++
1
+a;
) хм, возьму на заметку

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

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2013, 14:28     Почему нет ошибки?
Еще ссылки по теме:

Почему компилятор выдаёт ошибки? C++
Почему нет return 0? C++
C++ Почему нет ошибки?

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 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
Yandex
Объявления
22.03.2013, 14:28     Почему нет ошибки?
Ответ Создать тему
Опции темы

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