1 | |||||||||||
особенности передачи по "&&"16.07.2013, 01:21. Показов 6155. Ответов 13
Метки нет (Все метки)
я не знаю как называется передача по "&&" . я называю "по двум загогулинам."
вопрос №1: есть работающий код
вопрос №2: если не использовать шаблон, то будет облом - почему?
0
|
16.07.2013, 01:21 | |
Ответы с готовыми решениями:
13
Ошибка: multiple definition of `void std::swap<A>(A&, A&) Язык C, напечатать таблицу истинности логической функции (A & B & C), где & - знаки логический операций И, НЕ Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9& ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? |
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|||||||||||
16.07.2013, 01:40 | 2 | ||||||||||
soican, там есть правила вывода, если T - "выводимый" (deduced) тип. Тип t зависит от типа передаваемого в функцию параметра:
передали lvalue - получили lvalue ссылку (&); передали rvalue - rvalue ссылку (&&). Добавлено через 2 минуты Потому что a - это lvalue. Нельзя привязать lvalue к rvalue ссылке. Попробуй:
1
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
16.07.2013, 01:53 | 4 |
Он не обходит, "у него свои". T && превращается в T & либо T && (не учитывая cv) в зависимости от типа переданного аргумента (lvalue/rvalue).
Добавлено через 5 минут soican, можно погуглить reference collapsing rules
0
|
16.07.2013, 04:12 [ТС] | 5 | |||||
я погуглил, пока въезжаю...но суть вопроса такая,(вопроса №1):
bar принимает 42(rvalue) по &&. а внутри него foo использует 42 как const int&, а не как int&& Добавлено через 1 час 29 минут оформлю свой вопрос в код:
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
16.07.2013, 07:40 | 6 |
soican, Потому что t в функции это lvalue, а не rvalue.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
16.07.2013, 11:36 | 10 |
soican, Потому что переменная является lvalue. Сама по себе переменная в функции является lvalue.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
16.07.2013, 11:43 | 12 | |||||
soican, t - lvalue. В функции bar(T&& t) - t в контексте функции является lvalue.
Может быть такой пример даст больше понимания
1
|
Каратель
|
||||||
16.07.2013, 12:13 | 13 | |||||
2
|
16.07.2013, 12:23 [ТС] | 14 |
хороший пример
но если я напишу Moveable(C&& c) : obj(std::forward<C>(c)) вместо Moveable(C&& c) : obj(std::move(c)) будет тоже самое,а смотри, что написано: Добавлено через 6 минут Jupiter, показательно)) вообщем юзать move и forward
0
|
16.07.2013, 12:23 | |
16.07.2013, 12:23 | |
Помогаю со студенческими работами здесь
14
Порядок вычисления: операторы «|» и «||», «&» и «&&» Friend ostream& operator<<(ostream& stream, CArr& obj); Написать функцию swap(int& a,int& b,int& c), которая изменяет значения параметров по правилу a->b->c->a Создать функцию с параметрами GetFunctionValue(double& a, double& b, double& c, double& x)... Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |