Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Arlleex
0 / 0 / 1
Регистрация: 14.06.2013
Сообщений: 34
#1

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

23.06.2014, 03:25. Просмотров 395. Ответов 8
Метки нет (Все метки)

Доброй ночи!
Просматривая код некоторой программы, обнаружил конструкцию следующего вида:
C++ (Qt)
1
2
3
4
5
void function(char a, char *p)
{
    (void) a;
    (void) p;
}
Что это значит? Никогда до этого момента такого не видел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2014, 03:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Приведение к void (C++):

Приведение void* указателя к типу
struct tParamStruct { const char* Result; }; tParamStruct ParamStruct; ...

Приведение void* к типу указателя на структуру
Тема обсуждалась здесь, но решения так и нет нормального Есть два (и более,...

Приведение типов string.size() к (void*)
Добрый день помогите пожалуста записать значение возвращаемое string.size() в...

Приведение указателя на void к другому типу?
в поиске смотрел - не помогло! Возникла проблемка: В книге сказано, что...

Приведение void указателя к определенному типу с сохранением результата
Есть функция funс(void *pointer, char type) { ... } Нужно чтобы в...

Неправильное приведение void* к *float а далее к float
Почему когда привожу void* к int* потом к int то все работает, данные не бьются...

8
DrOffset
7518 / 4514 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
23.06.2014, 03:35 #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 *)
{
}
0
gray_fox
What a waste!
1552 / 1257 / 165
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
23.06.2014, 03:37 #3
Цитата Сообщение от Arlleex Посмотреть сообщение
Что это значит?
Так делают, что бы компилятор не выдавал предупреждений о неиспользованных переменных (a и p). Сейчас, для того, что бы уверить любой с++ компилятор в то что вы знаете, что делаете (насколько я знаю), достаточно иметь подобное определение ф-ии:
C++
1
void function(char, char *)
0
DrOffset
7518 / 4514 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
23.06.2014, 03:41 #4
Все это работает на основании 5.2.9/4:
Any expression can be explicitly converted to type "cv void". The expression value is discarded.
0
Arlleex
0 / 0 / 1
Регистрация: 14.06.2013
Сообщений: 34
23.06.2014, 03:48  [ТС] #5
Т.е. где-то в main() я могу написать так:
C++ (Qt)
1
2
3
char var, *pvar;
function(var, pvar); // здесь функция использует эти параметры
function(char, char *); // а тут не использует
? А какой практический толк от этого приема? Где, например, можно его использовать?
0
DrOffset
7518 / 4514 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
23.06.2014, 03:53 #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;
    }
};
Пример абстрактный, но тем не менее такие ситуации бывают.
1
gray_fox
What a waste!
1552 / 1257 / 165
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
23.06.2014, 03:55 #7
Цитата Сообщение от Arlleex Посмотреть сообщение
Т.е. где-то в main() я могу написать так:
Нет, "смысл не в этом". Это работает именно при определении функции.
1
Arlleex
0 / 0 / 1
Регистрация: 14.06.2013
Сообщений: 34
23.06.2014, 03:57  [ТС] #8
Ага, вроде как понял, буду разбираться дальше, спасибо всем!
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
23.06.2014, 14:11 #9
Цитата Сообщение от DrOffset Посмотреть сообщение
В С++ можно просто не писать имена аргументов:
А в сях можно и типы аргументов не указывать
0
23.06.2014, 14:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2014, 14:11
Привет! Вот еще темы с решениями:

Явное приведение "void*"
Всем привет В коде при компиляции появляется ошибка error C2440: =:...

Ошибка cannot convert from type void*(classname::) () to type void*(*)(void*)
Подскажите пожалуйста как избавиться от ошибки? Есть ещё какой-либо способ,...

Void menu(void); что это ? почему не void menu();
void menu(void); что это ? почему не void menu(); void naprimer(void); и это...

Дважды вычислить значение выражения, используя функции возвращающие void и не void
Хай!Помогите решить Дважды вычислить значение выражения, используя ...


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

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

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