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

std::move, rvalue reference - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ломбард - вывод табличных данных http://www.cyberforum.ru/cpp-beginners/thread850210.html
Помогите сделать таблицу. Плыз) #include <iostream> #include <fstream> #include <string.h> #include <windows.h> #include <iomanip> using namespace std; const int SZ=1;
C++ По поводу ссылок и конструктора копирования Никак не пойму. При создании объекта и передачи конструктору в качестве параметра объекта другого класса, отладчик показывает что на строчке Data(Element) выполняется конструктор копирования класса... http://www.cyberforum.ru/cpp-beginners/thread850196.html
Двухмерный массив: Написать программу, указывающую для каждого вопроса проценты ответов «Да», «Нет», «не знаю» C++
В двухмерном массиве размером n x m хранятся результаты опроса n человек на m вопросов. Ответами на вопросы являются слова «Да», «Нет», «не знаю». Написать программу, указывающую для каждого...
C++ Работа с графикой
Здравствуйте, помогите разобраться с программой? в результате должны получиться различные графические объекты, перемещающиеся по прямым траекториям с разными случайными векторами скоростей. и...
C++ Сформировать массив по правилу http://www.cyberforum.ru/cpp-beginners/thread850176.html
программа формирования и вывода массива размером 6 на 3, каждые три последовательных элемента в строке которого составлены по следующему правилу: 1-й - равен удвоенному числу, введенному с...
C++ Нужна проверка кода (система обмена сообщениями) есть код C++,компилируется в Mingw/bin при помощи g++. Данный код представляет собой систему обмена сообщениями. Идеальный случай,когда юзер не допускает ошибок при вводе регистрационных данных.... подробнее

Показать сообщение отдельно
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
27.04.2013, 19:58  [ТС]
Спасибо за ответ.
Кстати, по времени выполнения эта два варианты одинаковы: (0.7 сек)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Foo
{
public:
    Foo( vector<string> v): vec( move(v) ) {}
    vector<string> vec;
};
 
int main()
{
    vector<string> s(10000000,"text-text-text!");
    cout << "vector constructed!";
    Foo f( move(s) );
    cout << boolalpha << s.empty();
    return 0;
}
и
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <utility>
#include <vector>
 
using namespace std;
 
class Foo
{
public:
    Foo( vector<string> &&v): vec( move(v) ) {}
    vector<string> vec;
};
 
int main()
{
    vector<string> s(10000000,"text-text-text!");
    cout << "vector constructed!";
    Foo f( move(s) );
    cout << boolalpha << s.empty();
    return 0;
}

Цитата Сообщение от Nick Alte Посмотреть сообщение
А вот созданный прямо в месте вызова вектор можно и без move.
Вот так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <utility>
#include <vector>
 
using namespace std;
 
class Foo
{
public:
    Foo( vector<string> &&v): vec( v ) {} //убрал move
    vector<string> vec;
};
 
int main()
{
    vector<string> s(10000000,"text-text-text!");
    cout << "vector constructed!";
    Foo f( move(s) );
    cout << boolalpha << s.empty();
    return 0;
}
Компилятор не ругается, но время выполнения 1.4 секунды...

Если делать так:
C++
1
2
3
4
5
6
    Foo( vector<string> &&v): vec( move(v) ) {}
...
...
...
//вызов
Foo f(s); //ошибка: cannot bind 'std::vector<std::basic_string<char> >' lvalue to 'std::vector<std::basic_string<char> >&&'|
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru