programing

std :: ostream을 이동할 수없는 이유는 무엇입니까?

sourcetip 2021. 1. 15. 20:23
반응형

std :: ostream을 이동할 수없는 이유는 무엇입니까?


분명히 스트림은 복사 할 수 없습니다. 스트림 이동이 가능해야합니다. 27.9.1.11 [ofstream.cons] 제 4 항에 따라 구성은 이동하는 것이 가능하다 std::ofstream(동일 마찬가지이고 std::ifstream, std::fstream그리고는 std::*stringstream변형). 예를 들면 :

#include <iostream>
#include <fstream>
#include <string>

std::ofstream makeStream(std::string const& name) {
    return std::ofstream(name);
}

int main()
{
    std::ofstream out{ makeStream("example.log") };
}

std::ostream예를 들어, 인수로 전달 된 URN에 따라 std::ofstream, an std::ostringstream또는 다른 스트림을 생성하는 팩토리 함수를 갖기 위해를 이동하려고하면 작동하지 않습니다. std::ostream(음, 클래스 템플릿은 std::basic_ostream실제로) protected27.7.3.1 [ostream]에 따라 이동 생성자를 가지고 있습니다.

std::ostream스스로 움직일 수 없습니까?


원래는 움직일 수있었습니다. 이것은 제 부분의 디자인 결함으로 밝혀졌고 Alberto Ganesh Barbati가 발견했습니다.

http://cplusplus.github.io/LWG/lwg-defects.html#911

이 문제는 ostream이동 및 / 또는 교체 되는 몇 가지 예를 보여 주며 결과는 예상보다 놀랍습니다. 나는 이러한 유형이 공개적으로 이동하거나이 문제로 교체 할 수 없어야한다고 확신했습니다.

참조 URL : https://stackoverflow.com/questions/20774587/why-cant-stdostream-be-moved

반응형