Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/65: Рейтинг темы: голосов - 65, средняя оценка - 4.94
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1

Что значат два амперсанда?

07.09.2015, 21:39. Показов 14020. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
istream& getline (istream&& is, string& str, char delim);
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.09.2015, 21:39
Ответы с готовыми решениями:

скажите что значат %.2f, 4,8 что значат эти цифры и как оно выведет на экран
printf("\n Точность плавающей точки для PI: %.2f, %.4f, %.8f\n", PI,PI,PI); скажите что значат %.2f, 4,8 что значат эти цифры и как оно...

Один или два амперсанда после круглых скобок при объявлении метода
Сабж. Что это означает? struct Foo { int n = 200; int doWork () && { return n; } };

Что значат **?
Что значат ** ??? double** mas = (double**)malloc(sizeof(double)*(M));

15
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,242
07.09.2015, 21:42
Это ссылки.
https://ru.wikipedia.org/wiki/... C%2B%2B%29
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
07.09.2015, 21:46
Это rvalue-reference. Грубо говоря ссылка на временный объект.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.09.2015, 21:47  [ТС]
zss, ссылка на ссылку?

Добавлено через 36 секунд
castaway, это что-то из области научной фантастики С++11?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
07.09.2015, 21:48
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
castaway, это что-то из области научной фантастики С++11?
Да. Они появились в C++11.
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
07.09.2015, 22:10
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
ссылка на ссылку?
написали же
Цитата Сообщение от castaway Посмотреть сообщение
rvalue-reference
ссылка на rvalue объект
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.09.2015, 22:11  [ТС]
Croessmah,
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Добавлено через 36 секунд
castaway, это что-то из области научной фантастики С++11?
Добавлено через 36 секунд
0
07.09.2015, 22:13

Не по теме:

)))))))))))))))))))))))))))))

0
07.09.2015, 22:14

Не по теме:

Ferrari F1,

Цитата Сообщение от castaway Посмотреть сообщение
Это rvalue-reference. Грубо говоря ссылка на временный объект.
уж узнать никак нельзя :D

castaway, :friends:

0
07.09.2015, 22:16

Не по теме:

Croessmah, Ferrari F1, не стоит ругаться. Бывает.. не вовремя обновили страницу:)
Croessmah, :friends:

0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.09.2015, 22:24  [ТС]

Не по теме:

castaway, Croessmah, =)



Добавлено через 7 минут
castaway, Croessmah,
А так можно делать или это UB?
C++
1
2
3
4
5
int&& retrn (void)
{
 int x;
 return x;
}
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
07.09.2015, 22:28
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
А так можно делать или это UB?
такое же UB.
rvalue-ссылка в первую очередь пельмени ссылка, а уж потом всё остальное. Так что тут будет тоже самое, что и с обычной ссылкой
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.09.2015, 22:31  [ТС]
Croessmah, rvalue-reference для этого нужны?

C++
1
2
3
4
5
6
7
8
9
void smthng(int&& x)
{
  cout << "=)" << endl;
}
 
int main()
{
 smthng(2 + 2);
}
1
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
07.09.2015, 22:42
Не ужели так сложно поискать информацию в интернете: http://habrahabr.ru/post/226229/
1
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
07.09.2015, 22:46
Семантика перемещения и perfect forwarding(правильная передача)
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.09.2015, 22:46
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
rvalue-reference для этого нужны?
представьте себе обычную строку: std::string
там под капотом - указатель на память в куче.

то есть, когда мы создаем строку,
происходит медленная операция выделения памяти в куче,
и копирование символов:
C++
1
std::string text("hello, world");
теперь представьте себе, что нужно создать копию строки:
C++
1
2
std::string text("hello, world");
auto text1 = text;
при этом происходит глубокая копия строки.
объект text1 так же задействует медленную операцию выделения памяти.
а потом будет осуществлено копирование буковок из одного объекта в другой.

но ведь на самом деле, там под капотом - обычный указатель на память.
что если бы можно было бы новой строке просто тупо присвоить указатель на данные?

в этом случае операция прошла бы практически мгновенно.


а потом все бы поломалось на диструкторе:
сначала первая строка бы грохнула данные по указателю.
а потом, когда уничтожался бы второй объект,
он попытался бы освободить уже освобождённую память.

поэтому, так делать нельзя.
поэтому делаются медленные и глубокие копии.

но что, если первый объект временный?

если он временный - значит гарантированно не жилец:


C++
1
2
3
4
5
6
7
8
9
// возвращает временный объект
std::string foo() { std::string v("hello, world\n"); return v; }
 
...
 
// инициализируется временным объект
// и мы знаем точно - как только создание text завершится
// временный объект сдохнет
std::string text( foo() );
в этой ситуации мы знаем, что временный объект - не жилец.
он скоро сдохнет, а его данные тупо пропадут.

и вот здесь мы можем сэкономить:
вместо того, что бы выполнять глубокую копию,
давайте мы ограбим временный объект?

мы не будем делать никаких глубоких копий.
в новом объекте мы тупо переключим указатель на данные.
а в старом объекте его занулим.

получится, что новый объект обладает данными.
а старый объект, как будто бы просто пустой.

ну и пусть пустой, подумаешь, он все равно временный,
а значит - сдохнет.

двойной амперсанд позволяет различать "обычные объекты" от "временных",
что позволяет написать функции,
которые умеют обработать временные объекты особым образом.
они их грабят.

официально это называют "опустошением", или "перемещением".

r-value-reference - это ссылка на объект,
который можно смело ограбить.
и тем самым оптимизировать работу алгоритмов.
5
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.09.2015, 22:46
Помогаю со студенческими работами здесь

Что значат строки?
#include &lt;iostream&gt; using namespace std; int main() { double number, min; min = 0; for(int i = 0; i &lt; 10;...

Что значат символы?
Что означают эти операции &quot;-=&quot; и &quot;/=&quot; Синтаксис for(j=i+1; j&lt;n; j++) coef(i) -= A(i,j)*coef(j); ...

Что значат троеточие?
привет. смотрю такой сырец. Как дословно переводятся эти три точки? template &lt;typename Iterator, typename Expr , typename...

что значат эти строки?
half = num / 2, div = 2; if (num % div==0)

Что значат звечдочка и слово new
PRICE * spisok=new PRICE


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru