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

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

Войти
Регистрация
Восстановить пароль
 
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

Опциональный ссылочный аргумент функции - C++

23.02.2014, 09:46. Просмотров 945. Ответов 24
Метки нет (Все метки)

Некоторые аргументы функции можно сделать опциональными, просто поставив значение по умолчанию, а затем проверяя, изменилось ли оно :
C++
1
2
3
4
5
6
7
void someFoo(int important, int *additional = NULL)
{
if (additional != NULL)
{
//do someFoo
}
}
Можно ли сделать так же для ссылочного типа?
C++
1
2
3
4
5
6
7
void someFoo(int important, int &additional) // ???
{
if (additional) //  ??? -> PROFIT
{
//do someFoo
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2014, 09:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Опциональный ссылочный аргумент функции (C++):

Вычислить значение функции аргумент которой вычисляется из другой кусочно заданной функции - C++
Решите программу то я не знаю как:hysteric: Вычислить значение y в зависимости от выбранной функции \varphi (x), аргумент которой...

Безымянный аргумент функции - C++
функция принимает аргумент, но у него нет имени void f(int) { cout << "Hello world!"; } int main() { int n =...

Передача функции в аргумент - C++
Есть три функции: void MainMenu(); void MainMenu_MilkMenu(); bool ErrorMenu(void (*pf)()); Все прототипы находятся в...

Не читается аргумент функции - C++
void recursReverse(char* str, size_t len) { static size_t len2 = len; while (len2 > 1) { std::swap(*str, *(str + len2 - 1)...

Непонятный аргумент функции - C++
Кто-нибудь может подсказать, что принимает такая функция в качестве аргумента? void foo(int (**i)(double)) { ..... }

Класс как аргумент функции - C++
Доброго времени суток:) Набрёл на такой пример в openGL и не могу понять как он робит, подскажите. Вот описание ф-ции: void...

24
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
25.02.2014, 16:30 #16
Цитата Сообщение от nexen Посмотреть сообщение
а она разве в случае, когда нужно сделать рекурсию с внутренними данными поможет?
Честно говоря не очень понята эта формулировка.
Но смысл она (rvalue reference) несет тот же, что и в записи с неконстантной ссылкой. Временный объект не копируется, привязывается к ссылке с именем str.
1
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
25.02.2014, 17:07  [ТС] #17
DrOffset, я про то, что писал выше:
C++
1
2
3
4
5
6
7
8
9
10
11
12
string Foo(string & str = string())
{
//something to exit
Foo(str);
//something to calc
return str;
}
 
int main()
{
Foo();
}
Мне изначально это нужно было, чтобы вызывать функцию без аргументов да так, чтобы внутри неё формировался некоторый массив ответов (в примере это строка), а затем уже возвращалась копия того локального массива, который создавался в функции (конечно, жаль, что копия, а не сам объект, но что поделать). Разве в этом случае && мне поможет?
0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
25.02.2014, 19:05 #18
Цитата Сообщение от nexen Посмотреть сообщение
Разве в этом случае && мне поможет?
За исключением того, что в твоем примере изначально бесконечная рекурсия, не вижу причин почему нет?
1
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
25.02.2014, 20:42  [ТС] #19
DrOffset, как я уже отвечал выше, я же в комментариях написал, что есть нечто, для выхода из функции "//something to exit" - 3 строка.
То есть && может выполнять ту же функцию, что и &?
0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
25.02.2014, 21:04 #20
Цитата Сообщение от nexen Посмотреть сообщение
DrOffset, как я уже отвечал выше, я же в комментариях написал, что есть нечто, для выхода из функции "//something to exit" - 3 строка.
То есть && может выполнять ту же функцию, что и &?
Может быть стоит попробовать, а потом задать вопросы, если не получится?
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
25.02.2014, 21:07  [ТС] #21
DrOffset, не обладаю C++11 компилятором :'( Всё ещё сижу на VS2008, хотя давно стоит VS2012. Такие уж условия свыше
0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
25.02.2014, 21:12 #22
Цитата Сообщение от nexen Посмотреть сообщение
DrOffset, не обладаю C++11 компилятором
Так это не проблема, можно попробовать все фичи здесь.
1
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
26.02.2014, 07:08  [ТС] #23
DrOffset,
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
#include <iostream>
#include <string>
using namespace std;
 
string Foo(string && s = string(""), char && x = 'G')
{
    s += x;
    if (x == 'A')
    {
        return "";
    }
    Foo(s, (char)((int)x - 1));
    if (x == 'G')
    {
        
        return s; 
    }
    return "";
}
 
int main() {
    cout << Foo();
    return 0;
}
Compiling the source code....
$g++ -std=c++11 main.cpp -o demo -lm -pthread -lgmpxx -lgmp -lreadline 2>&1
main.cpp: In function 'std::string Foo(std::string&&, char&&)':
main.cpp:12:19: error: cannot bind 'std::string {aka std::basic_string<char>}' lvalue to 'std::string&& {aka std::basic_string<char>&&}'
Foo(s, (int)x - 1);
^
main.cpp:5:8: error: initializing argument 1 of 'std::string Foo(std::string&&, char&&)'
string Foo(string && s = string(""), char && x = 'G')
^
http://www.compileonline.com/compile_cpp11_online.php
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.02.2014, 07:56 #24
nexen,
C++
1
    Foo(std::move(s), (char)((int)x - 1));
2
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
26.02.2014, 17:17  [ТС] #25
Tulosba, и правда работает.
DrOffset, magic
0
26.02.2014, 17:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2014, 17:17
Привет! Вот еще темы с ответами:

Локальные переменные в функции и её аргумент - C++
Привет! Пишу функцию перевода десятичного числа в текст (не обсуждайте зачем и правильно ли я делаю) Суть такова, начало функции: ...

Аргумент argv в функции main() - C++
Здравствуйте. Возникли некоторые непонимания при работе с аргументом argv и указателями в целом. Мне сказали, что, при передаче...

Аргумент в виде шаблонной функции - C++
void Function(любая_функция_с_одним_параметром){} Как при помощи шаблона всунуть в аргумент функции, любую функцию с одним параметром,...

Auto как аргумент функции - C++
Возможно ли объявить параметр функции как auto? void func(auto pt); //...


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

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

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