c ++ 11 — c ++ rvalue move семантика, вопросы о потоковой передаче

Пара вопросов о семантике и производительности:

x = 0;
While (x < 10) {
std::cout << "Some text here to send to cout";
++x;
}

Я использую gcc 4.7, должен ли текст для потока быть обернутым внутри std :: move?

Как это:

   x = 0;
While (x < 10) {
std::cout << std::move("Some text here to send to cout");
++x;
}

И пока я спрашиваю, лучше ли в таких случаях просто сделать строку статичной, например:

x = 0;
While (x < 10) {
static const char* s = "Some text here to send to cout";
std::cout << s;
++x;
}

1

Решение

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

3

Другие решения

Нет и нет Там нет никакой разницы для operator<< будь то const char * Аргументом является rvalue или lvalue: в последнем случае стандартное преобразование lvalue в rvalue (чисто концептуальное) будет автоматически применено перед его передачей operator<<,

1

По вопросам рекламы [email protected]