파일 스트림은 문자열 생성자 매개 변수를 허용하지 않는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/9473236

문제

다음 코드가 컴파일되는 이유 C++11 그리고 안 들어있어요 C++03? (둘 다 gcc 그리고 cl)

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

int main(int argc, char* argv[]) {
    const std::string t("Hello");
    std::ofstream out(t);
}

왜 안 C++03 스트림 수락 std::string 생성자 매개 변수로? 이 결정은 무언가를 기반으로 한 것입니까,아니면 우연히 발생 했습니까?

도움이 되었습니까?

해결책

코드 실패한 경우 컴파일한 엄격하게 따르는 C++03 컴파일러기 때문에 사용하는 생성자 std::string 만 추가에서는 C++11.

으로 질문에는"그것이 뭔가를 기반으로 스마트"으로,인터페이스 추가로,그것을 유추할 수 있는 없는 기술적 이유로 그것을 생략한다.

그것은 또한 편의 대로가 있는 경우 std::string, 에,당신은 항상 호출 할 수 있습니다 .c_str() 을 얻 C 문자열을 사용하기에 적합한 오래된 인터페이스입니다.(로 설명서에서는 C++11 말한다,사용하는 생성자 std::string정확히 는 것과 같은 효과를 호출하면 해당 생성자를 취하는 const char* 그 결과의 전화 .c_str() 에서 문자열입니다.)

다른 팁

내가 기억 하듯이,이것은 씨.엘.씨++에서 논의되었습니다.몇 년 전,앤드류 코닉(어쨌든 앤드류라고 생각합니다)은 실제로 일부 회의 중에 제기되었다고 말했습니다, 하지만 수용의 아이디어 string 빠르게 수용의 아이디어와 혼동되었다 wstring 또한,그리고 거기에서 파일 이름의 국제화된 문자 집합에 대한 지원에 대한 논의로 바뀌었습니다...그 후 얼마 지나지 않아 그 모든 아이디어는 폐기되었습니다.왜냐하면 그것은 아무도 바로 그 당시에 대처할 준비가 되어 있지 않은 큰 벌레 캔을 열었기 때문입니다.

그들은 단순히 기억에 대한 추가 string 생성자에서는 C++03.이제는 고정됩니다.이번 라운드는 다른 것들이 잊고 있었,아 make_unique.무언가가 항상있는 더 많은 것이 하나 있을 수 있었다.C++03 도 잊을 지정하는 기본값에 대해 인수 기능 템플릿는 이제 포함되어 있습니다.

편집: 로@찰스 말하지 않을 수 있습니다,리터럴"잊고"하지만,오히려,그것은 뭔가가 분명 수있다,하지만 단지 없이 지정되어 어떤 이유로 또 다른입니다.추가 예제가에 의해 주어 std::next/std::prev, 는 중대한 완화 std::to_stringstd::stoi/d/ul/ull, 는,다시 만드는 완벽한 감각,그러나 아무도 먹은 주위를 지정할 때까지 그들이 이번 라운드.요하지 않습 깊은 이유로 자신의 이전 부재.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top