cplusplus.com의 문제점은 무엇입니까? [닫은]
이것은 아마도이 질문에 완벽하게 적합한 포럼은 아니지만 멀리 갈 위험에 처하게하겠습니다.
귀중한 ISO 표준, MSDN , IBM , cppreference 및 cplusplus를 포함하여 C ++ 표준 라이브러리에 대한 몇 가지 참조가 있습니다 . 개인적으로 C ++을 작성할 때 빠른 임의 액세스, 짧은로드 시간 및 사용 예제가있는 참조가 필요하며 cplusplus.com이 매우 유용하다는 것을 알았습니다. 그러나 나는 SO에 대한 웹 사이트에 대한 부정적인 의견을 자주 듣고 있으므로 구체적으로 설명하고 싶습니다.
cplusplus.com이 제공 한 오류, 오해 또는 잘못된 조언은 무엇입니까? 코딩 결정을 위해 사용하는 위험은 무엇입니까?
이 요점을 추가하겠습니다. 표준에 대한 정확한 인용문으로 여기에 대한 질문에 대답하고 싶습니다. 따라서 즉시 사용 가능한 링크를 게시하고 싶습니다. cplusplus.com은 내가 선택하지 않은 사이트였습니다. 이 문제.
편집 :std::remove
이 답변이 작성된 이후 설명서 가 수정되었습니다. 같은 내용이에 적용됩니다 list::remove
.
cpluscplus.com이 어떻게 잘못 될 수 있는지 보여주는 예를 들어 보겠습니다.
의 std::remove
함수를 고려하십시오 <algorithm>
.
사실은 std::remove
컨테이너에서 항목을 제거하지 않습니다. 그 이유 std::remove
는 한 쌍의 반복자와 만 작동하며 실제로 항목을 포함하는 컨테이너에 대해서는 아무것도 모르기 때문입니다. 사실, std::remove
기본 컨테이너를 알 수는 없습니다. 반복자가 속한 컨테이너에 대해 한 쌍의 반복자에서 벗어날 수있는 방법이 없기 때문입니다. 따라서 std::remove
실제로는 항목을 제거 할 수 없기 때문에 항목을 제거 하지 않습니다 . 컨테이너에서 항목 을 실제로 제거하는 유일한 방법 은 해당 컨테이너에서 멤버 함수를 호출하는 것입니다.
따라서 항목을 제거하려면 Erase-Remove Idiom 을 사용 하십시오 .
v.erase(std::remove(v.begin(), v.end(), 10), v.end());
그러나에 cplusplus.com
대한 잘못된 정보를 제공합니다 std::remove
. 그것은 말한다
공지 사항이 기능은 변경하지 않는 새로운 끝에 과거의 요소, 자신의 이전 값을 유지 하고있다 여전히 접근을 .
맞지 않습니다. 범위의 반복자 [new_end, old_end)
는 여전히 역 참조 가능하지만 이전 값 을 유지하고 여전히 액세스 가능 하다는 의미는 아닙니다 . 그들은 지정되지 않았습니다.
마찬가지로, 잘못된 정보도 cplusplus.com
제공 합니다. 라고 말합니다 .list::remove
글로벌 알고리즘 함수 인 remove 는 유사한 동작으로 존재 하지만 두 반복자 사이에서 작동합니다.
완전히 잘못되었습니다. 우리는 전자 가 컨테이너에서 아이템을 실제로 제거 할 수 없기 때문에 글로벌 제거 std::remove
는 비슷 하지 않다 . 반면에 후자는 (멤버 함수) 실제로는 아이템을 제거 할 수 있기 때문이다 .list::remove
이 답변은 다음 주제의 다른 답변에서 수정되었지만 거의 수정되지 않았습니다.
참고 : 위의 주제에서 답장을 할 때 최근에 이것을 보았으므로 기억합니다. 지난 2 년 동안 내가 겪었던 많은 오류가 있는데, 기억 나지 않습니다. 다시 건너면 나중에 몇 개 더 추가 할 수 있습니다.
반대로 약간 의견을 제시 할 것입니다. cplusplus.com에 대한 좋은 정보가 많이 있습니다. 그것을 죽일 때 선택하십시오. 물론 문제가 있지만 어떤 사이트가 그렇지 않습니까? 확실히이 사이트는 아닙니다 . 유리 집에 사는 사람들은 돌을 던져서는 안됩니다. 여기에도 잘못된 정보가 많이 있습니다. 정확하고 잘못된 답이 있고 다운 봇 된 답이 있습니다 (일부 부정적입니다).
cplusplus.com의 한 가지 문제는 폐쇄 된 사이트라는 것입니다. 언급 된 대부분의 다른 참조 사이트에서도 마찬가지입니다. 이는 스택 오버플로와 같은 커뮤니티 개발 사이트의 결정에 위배됩니다. 신뢰할 수있는 편집 기능을 얻는 데 많은 시간이 걸리지 않으며 최신 초보자도 쉽게 개선 제안을 할 수 있습니다. cplusplus.com과 비교해보십시오. 당신이 그들의 직원이 아닌 경우 당신은 영원한 초보자입니다. WG21의 핵심 구성원 인 경우에도 해당 사이트 어딘가에 버그가 있으면 이메일 보고서 메커니즘을 거쳐야합니다. 저주!
이 사이트에서 우리 자신의 C ++ 참조를 개발하는 것이 해결책이 될 것입니다. 이것은 약간의 작업이 필요합니다. 우리는 너무 비관적이고 너무 기술적이지 않도록 조심해야합니다. cplusplus.com은 최소한의 기술 편집자들을 고용하고 있으며,이를 바탕으로 pedants를 억제합니다. 정보를 체계적으로 유지해야합니다. 여기 FAQ는 잘 정리되어 있지 않습니다. 우리는 또한 표준에서 너무 많이 추출하지 않도록 매우 조심해야합니다. 그건 불법입니다.
http://www.cplusplus.com/reference/clibrary/cstring/strncpy/
"겹치는 객체간에 복사가 발생하면 동작이 정의되지 않습니다."라고 언급하지 않습니다. (C89 표준에서는 4.11.2.4. C ++ 03이 실제로 참조하는 C90의 사본을 가지고 있지 않지만 페이지 번호 매기기와 같은 내용에서만 다를 수 있습니다.)
cplusplus.com에서 제공 한 설명서는 종종 부정확하거나 불완전합니다.
그러한 예가 atoi
나오면 cplusplus.com 의 문서입니다.
atoi
반환 섹션에서, 함수를 사용하는 동안 변환을 수행 할 수없는 경우 약 0의 반환 값에 대한 언급이 없습니다.
cplusplus.com 리턴 섹션에 "... 변환 된 값이 int에 의해 표현 가능한 값 범위를 벗어나면 정의되지 않은 동작이 발생합니다."
표준 " 문자열의 숫자 값을 int로 표현할 수없는 경우, 동작은 정의되어 있지 않습니다 "에 따라 이는 정확합니다 .
그러나 반환 값으로 0을 언급하지 않으므로 섹션이 가득 차지 않아 잘못 될 수 있습니다. "... 변환이 수행되지 않고 0이 리턴됩니다." 설명 단락에서 이전에 충족되었지만 반환 섹션 에 있어야합니다 .
cplusplus.com에 제공된 많은 샘플 소스 코드가 올바르지 않습니다.
이 참고 문헌을 찾는 많은 초보자들은 확실한 오류를 일으 킵니다.
예를 들자면 :
편집 : 이전에 인용 한 예가 잘못되었습니다.
설명서는 먼저 type_info
설명 을 시도 typeid
하지만 실패합니다.
typeid는 형식에 직접 적용 할 수 있으며이 경우 정보를 반환합니다. 또는 객체의 경우 객체 유형에 대한 정보를 반환합니다.
When typeid is applied to a dereferenced pointer to an object of a polymorphic class type (a class declaring or inheriting a virtual function), it considers its dynamic type (i.e., the type of the most derived object).
Now the second paragraph already disagrees with the first. In typeid(*ptr)
, typeid
is applied to an expression. This is rather essential, since the notion of static
and dynamic
types only makes sense in the context of expression, not objects. It also misses cases like typeid(foo())
.
Furthermore, the second paragraph omits references. They too can have static types different from the dynamic type of the object they reference.
The documentation of std::pair<T1,T2>::operator==
says that both elements are tested for equality. The documentation of std::pair<T1,T2>::operator<
says that the second elements are considered only if the first elements are equal.
The word "equal" appears in both cases. Yet, only in the first case does it really mean T::operator==
. In the second case, equal means !(a.first<b.first || b.first<a.first)
참고URL : https://stackoverflow.com/questions/6520052/whats-wrong-with-cplusplus-com
'IT' 카테고리의 다른 글
angular.js의 인라인 조건 (0) | 2020.05.14 |
---|---|
HttpOnly 쿠키는 AJAX 요청과 어떻게 작동합니까? (0) | 2020.05.14 |
이 새로운 ASP.NET 보안 취약점은 얼마나 심각하며 어떻게 해결할 수 있습니까? (0) | 2020.05.14 |
NoSQL 데이터 저장소를 사용하여 어떤 확장 성 문제가 발생 했습니까? (0) | 2020.05.14 |
NoSQL 데이터 저장소를 사용하여 어떤 확장 성 문제가 발생 했습니까? (0) | 2020.05.14 |