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

Приведение к void - C++

Восстановить пароль Регистрация
 
Arlleex
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 34
23.06.2014, 03:25     Приведение к void #1
Доброй ночи!
Просматривая код некоторой программы, обнаружил конструкцию следующего вида:
C++ (Qt)
1
2
3
4
5
void function(char a, char *p)
{
    (void) a;
    (void) p;
}
Что это значит? Никогда до этого момента такого не видел.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
23.06.2014, 03:35     Приведение к void #2
Arlleex, это такой прием, чтобы избежать warning`а о неиспользуемых аргументах функции.
Иногда встречается в более человеческом варианте:
C++
1
2
3
4
5
6
7
#define UNUSED(arg) (void)(arg);
.......
void function(char a, char * p)
{
    UNUSED(a)
    UNUSED(p)
}
Прием перекочевал из С. В С++ можно просто не писать имена аргументов:
C++
1
2
3
void function(char, char *)
{
}
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
23.06.2014, 03:37     Приведение к void #3
Цитата Сообщение от Arlleex Посмотреть сообщение
Что это значит?
Так делают, что бы компилятор не выдавал предупреждений о неиспользованных переменных (a и p). Сейчас, для того, что бы уверить любой с++ компилятор в то что вы знаете, что делаете (насколько я знаю), достаточно иметь подобное определение ф-ии:
C++
1
void function(char, char *)
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
23.06.2014, 03:41     Приведение к void #4
Все это работает на основании 5.2.9/4:
Any expression can be explicitly converted to type "cv void". The expression value is discarded.
Arlleex
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 34
23.06.2014, 03:48  [ТС]     Приведение к void #5
Т.е. где-то в main() я могу написать так:
C++ (Qt)
1
2
3
char var, *pvar;
function(var, pvar); // здесь функция использует эти параметры
function(char, char *); // а тут не использует
? А какой практический толк от этого приема? Где, например, можно его использовать?
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
23.06.2014, 03:53     Приведение к void #6
Цитата Сообщение от Arlleex Посмотреть сообщение
Т.е. где-то в main() я могу написать так:
Нет. Здесь совсем о другом говорится.
Цитата Сообщение от Arlleex Посмотреть сообщение
А какой практический толк от этого приема? Где, например, можно его использовать?
Вот например:
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
class SomeBase
{
public:
    virtual bool check(int a) const = 0; 
};
 
class SomeDerivedA : public SomeBase
{
public:
    virtual bool check(int a) const
    {
         return a < 10 && a > 0;
    }
};
 
class SomeDerivedB : public SomeBase
{
public:
    virtual bool check(int a) const
    {
         (void)a;
         return true;
    }
};
Пример абстрактный, но тем не менее такие ситуации бывают.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
23.06.2014, 03:55     Приведение к void #7
Цитата Сообщение от Arlleex Посмотреть сообщение
Т.е. где-то в main() я могу написать так:
Нет, "смысл не в этом". Это работает именно при определении функции.
Arlleex
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 34
23.06.2014, 03:57  [ТС]     Приведение к void #8
Ага, вроде как понял, буду разбираться дальше, спасибо всем!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2014, 14:11     Приведение к void
Еще ссылки по теме:

C++ Что значит void(*f)()=(void(*)()func?
C++ Приведение void* к типу указателя на структуру
Приведение void* указателя к типу C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
23.06.2014, 14:11     Приведение к void #9
Цитата Сообщение от DrOffset Посмотреть сообщение
В С++ можно просто не писать имена аргументов:
А в сях можно и типы аргументов не указывать
Yandex
Объявления
23.06.2014, 14:11     Приведение к void
Ответ Создать тему
Опции темы

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