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

Могут ли теоретически существовать методы с неопределенным числом аргументов? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Массив строк и найти в нем максимальную по длине строку http://www.cyberforum.ru/cpp-beginners/thread1508370.html
Ввести массив строк и найти в нем максимальную по длине строку. Не учитывать случай, когда таких строк несколько.
C++ Работа с pdf файлом Добрый день, подскажите, можно ли стандартными средствами открыт PDF файл, для последующей работы с ним? Или есть свободные библиотеки для этого? http://www.cyberforum.ru/cpp-beginners/thread1508361.html
Заполнение вектора в цикле C++
Попробовал так (для освоения материала) #include <vcl.h> #include <vector> #include <iostream> #include <algorithm> //sort #include <functional> //greater or compare typedef vector<int> Vec; //тип для вектора из int-ов Vec MyVector(1); // один из векторов
Как заставить подфункцию выдать обработанный массив? C++
Имеется программа, суть которой - обработать массив с данными; основной рабочий кусок содержит две вложенных функции - procedure1 и procedure2: void procedure1 (параметры) { ... } void procedure2 (параметры) {
C++ В заданном слове удалить букву http://www.cyberforum.ru/cpp-beginners/thread1508341.html
Дано слово. а) удалить из него третью букву. б) удалить из него 1-ую из букв о, если такая буква есть.
C++ Правильно прочитать данные из базы данных Всем привет. Суть проблемы следующая Использую базу данных SQLLite, на кириллице и английские символы читает нормально, а вот иероглифы(китайские, японские) не читает, выводит одни знаки вопроса. sqlite3 *db; sqlite3_stmt * pStmt; int i, j, coln, rc; int b = 1; //"SELECT build, date FROM version;" подробнее

Показать сообщение отдельно
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
03.08.2015, 23:06     Могут ли теоретически существовать методы с неопределенным числом аргументов?
Цитата Сообщение от DiffEreD Посмотреть сообщение
а зачем здесь static_cast<void> ?
Чтобы подавить предупреждение компилятора:
warning: expression result unused
Добавлено через 2 минуты
Цитата Сообщение от castaway Посмотреть сообщение
а кому нужна версия с нулевым количеством параметров?)
Ну, это как факториал нуля Для полноты картины.

Добавлено через 18 минут
Короче, я сам продаунгрейдил функцию при "оптимизации" В исходном варианте возможность вызова с нулевым кол-вом аргументов была. Возвращаю:
C++
1
2
3
4
5
6
7
template<typename... Args>
void print(const Args&... args)
{
    using swallow = int[];
    static_cast<void>( swallow{ 0, (std::cout << args << ' ', 0)... } );
    std::cout << std::endl;
}
Добавлено через 44 минуты
Могу ещё такой вариант предложить:
C++
1
2
3
4
5
6
template<typename... Args>
void print(const Args&... args)
{
    int dummy[]{ 0, (std::cout << args << ' ', 0)... };
    std::cout << std::endl;
}
И вот ещё почитайте кому интересно.

Добавлено через 5 часов 39 минут
Цитата Сообщение от Evg Посмотреть сообщение
т.е. обе строки формально некорректны, но предупреждение выдаётся только на вторую
Как я понимаю, защита в первую очередь направлена на исключение ситуаций с разными размерами данных (в байтах). Собственно поэтому на %d не ругается при использовании unsigned аргумента, так же как и на %o (или %x) не будет ругаться при использовании знакового int'а. А вот когда длина данных не совпадает с форматом, тогда ошибка наиболее очевидна.
 
Текущее время: 04:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru