Вопрос

GNU gcc 4.3 частично поддерживает предстоящий стандарт c ++ 0x:среди реализованных функций ссылка на значение rvalue.С помощью ссылки rvalue должно быть возможно переместить объект, не подлежащий копированию, или вернуть его из функции.

Являются ли std::streams уже подвижными с помощью ссылки на rvalue или в текущей реализации библиотеки чего-то не хватает?

Это было полезно?

Решение

В текущем g ++ svn поддержка ссылок на rvalue еще не добавлена в streams.Я подозреваю, что добавить его будет не слишком сложно, и, как всегда с программным обеспечением с открытым исходным кодом, исправления, я уверен, приветствуются!

Другие советы

После быстрого расследования выясняется, что ссылка на значение rvalue поддержка streams еще не добавлена.

Чтобы вернуть объект, не подлежащий копированию, из функции, действительно, достаточно реализовать конструктор перемещения следующим образом:

struct noncopyable
{
    noncopyable()
    {}

    // move constructor
    noncopyable(noncopyable &&)
    {}

private:
    noncopyable(const noncopyable &);
    noncopyable &operator=(const noncopyable &);
};

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

Тем не менее, можно вернуть объект из функции таким способом:

noncopyable factory()
{
    noncopyable abc;
    return std::move(abc);
}

Хотя std::stream не поддерживает конструкторы перемещения, похоже, что контейнеры STL, поставляемые с gcc 4.3.2, уже поддерживают это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top