방금 -std=c++0x
청년들이하는 일을 모호하게 처리하고 싶었 기 때문에 (GCC 에서 플래그로 내 코드 일부를 컴파일했습니다. ) 에 대해는 auto_ptr
사용되지. 물론 auto_ptr
C ++ 0x에서 더 이상 사용되지 않는다는 것을 알고 있었지만 …
지원 중단이 시간과 노력을 낭비하지 않습니까? 더 이상 사용되지 않는 이유 (예 : auto_ptr 사용) :
-
수백만 개의 경고가 발생하면 사람들은 경고를 끄도록 유혹 할 것입니다.
-
auto_ptr
약간 naff이지만 실제로 주석에서 말하는 것을 수행합니다. -
실제로 더 이상 사용하지 않으려면을 추천
printf()
합니다. 그러나 뒤 따르는 소리를 상상해보십시오.auto_ptr
친구가 많지 않지만 적어도 내 C ++ 코드에서는 이상printf
사용되어 전혀 사용되지 않습니다. -
그들은 네임 스페이스 범위에서 정적되지, 지금은 undeprecated 된 것으로 보인다 – -위원회는이 권리를 얻기의 나쁜 기록이 있다면 나는 놀라지 않을 것이다
auto_ptr
컴백 유사한했다 -
마지막으로,위원회가 말한대로 컴파일러 구현자는이를 무시합니다. 고객 코드를 손상시킬 위험이 없으며, 자극적 인 경고 만하면됩니다.
그래서 내 질문-당신은 (C ++뿐만 아니라 auto_ptrs뿐만 아니라) 사용 중단을 좋은 아이디어라고 생각합니까? 그렇다면 왜?
답변
지원 중단 사유 (일반) :
- 그것은 사람들에게 뭔가 나쁜 습관임을 분명히 나타냅니다 (그리고 대안을 제안합니다).
- 사용 중단 기간은 컴파일러가 코드를 완전히 제거하기 전에 코드를 변경할 수있는 기회를 제공합니다.
나는 또한 마지막 요점에 동의하지 않습니다. 컴파일러는위원회를 무시하지 않으며, 그들이 사용되지 않는 것들을 제거 결국 않습니다 (예를 >?=
하고 <?=
– 그들은 다음 제거 *를 사용되지 않는 GCC에서).
중요한 점은 여러 가지 이유로 제거해야 할 것이라며, 더 이상 사용되지 않는 것이 유일한 방법이라고 생각합니다. 이 경우 auto_ptr
에는로 대체되었으므로 제거해야합니다 unique_ptr
. 전환은 충분히 쉽고 사람들은 그렇게 할 시간이 충분합니다.
(*) 그렇습니다. 나는 그것이 확장이 아니며 표준이 아니라는 것을 알고 있지만, 요점은 컴파일러 공급 업체가 코드가 의존하지 않더라도 사용 중단이 시작되면 결국 물건을 제거한다는 것입니다.
답변
충분히 복잡한 API는 오랫동안 사용 된 후에도 발견되지 않는 결함이있을 수 있습니다. 우리의 옵션 :
- 그대로 두십시오. 이는 시간이 지남에 따라 API가 계속 발전함에 따라 점점 더 많은 cruft를 수집 할 것임을 의미합니다. 새롭고 개선 된 버전이 추가 되더라도 이전 버전도 유지 관리해야합니다.
- 경고없이 제거하십시오. 이것은 많은 코드를 손상시킬 수 있습니다.
- 더 이상 사용하지 않고 이후 버전에서 제거하십시오. 이는 기존 코드를 수정하는 시간을 제공하는 동시에 크래프트의 양이 제한되는 것을 보장합니다.
더 이상 사용되지 않는 것이 이러한 대안 중 가장 낫습니다.
답변
아냐 더 이상 사용되지 않는 것이 좋습니다. 기술이 쓸모없는 오래된 수하물에 갇히지 않도록합니다.
C ++ 분야에서 for 문 내에서 변수 선언을 올바르게 지원하지 않는 Microsoft의 “기능”을 기억합니다. 그것은 약 10 년 동안 계속되었고 많은 코드를 이식 할 수 없게 만들었습니다. 그건 “추천”된 것이 기쁘다.
더 일반적으로, 애플은 80 년대의 어리석은 오래된 API를 5-7 년 동안 “더 이상 사용하지 않는”것으로 표시 한 이후 습관을 잃었다. 나는 WWDC의 Apple 엔지니어와 고대 QuickTime C API 중 일부를 사용하지 않는 것에 대해 이야기하고 있었는데 1990 년경에 개발 된 모델에 대한 지속적인 지원이 우리가 기대할 수있는 것을 완전히 방해하고 있었기 때문에 그들이 그렇게하고 있다는 것을 듣고 기뻤습니다 최신 64 비트 멀티 코어 CPU에서 수행 할 수 있습니다.
실제로 컴파일러 작성자가 auto_ptr을 덤프하는 데 오랜 시간이 걸리며 아마도 10 ~ 2 년 동안 일부 이전 버전과 호환되는 모드를 지원할 것이지만 좋은 것은 imo입니다.
답변
더 이상 사용하지 않으려는 경우 printf ()를 추천합니다.
printf
유용한 기능입니다. 그것은 iostream보다 짧은 포맷을 허용합니다. 그리고 그것은 C 함수입니다. C ++가 존재하고 사용되는 이유는 C와 호환되기 때문입니다. 따라서 더 이상 사용되지 않는 printf
것이 덜 유용 해 보입니다.
그렇다면 더 이상 사용되지 않는 성전을 원하십니까?
위원회는 현재 사용이 중단 될 것으로 예상되는 몇 가지 문제에 대해 알고 있습니다. 지원 중단의 의미를 참조하십시오 .
답변
언어와 API는 발전해야합니다. 일부 이전 기능에 따라 많은 코드가있을 수 있지만 새롭고 더 나은 방법이있을 수 있으며 이전 기능을 지원하는 비용이 너무 많습니다.
또한 지원 중단은 향후 기능이 제거 될 것이라는 경고를 표시합니다. 이를 통해 개발자는 새로운 API를 따르는 경우 코드를 업데이트 할 수 있습니다. 이것은 대안보다 훨씬 낫습니다 : 완전히 제거하십시오. 감가 상각은 오류가 아니라 경고입니다.
그리고 이것이 당신이 업데이트하고 싶지 않은 오래된 프로그램이라면, 오래된 API (또는이 경우 컴파일러)를 사용하는 것을 막을 수있는 것은 없습니다.
답변
현재, 지원 중단에는 두 가지 이상의 의미가 있습니다.
- 향후 버전에서 제거 될 예정입니다.
- 우리는 더 나은 대안을 만들었으며 이제는 기능이 중복 적이지만 완전히 쓸모는 없습니다. 새로 온 사람들은 언어를 배우는 동안 이것을 건너 뛰는 것이 좋습니다. 그러나 곧 제거되지는 않습니다.
정적은 후자의 범주에 속한다고 생각하지만 auto_ptr을 실제로 제거 해야하는지 또는 언어로 유지하는 것이 더 좋은지 시간 만 알 수 있습니다.
답변
대안으로 이동하는 것이 1 일 (근무일 기준)에 수행 될 수있는 경우, 더 이상 사용되지 않습니다. 기존 기능을 새로운 기능으로 간단하게 검색 / 교체하거나 호환성 레이어를 쉽게 설정할 수 있습니다.
지원 중단으로 인해 소프트웨어의 많은 부분을 다시 작성해야하는 경우 유해합니다.
좋은 예는 아마도 PHP의 mysql API 일 것입니다. 기본적으로 모든 mysql_ *를 mysqli_ *로 바꾸고 링크 ID를 제공하면됩니다.
OpenGL3에서 glBegin, glEnd 및 모든 행렬 계산 항목이 사용되지 않는 나쁜 예가 있습니다. OpenGL3 이상에서 코드 작업을하려면 정점 버퍼를 사용하기 위해 전체 렌더링 코드를 다시 작성해야합니다.