문제

이 질문은 어리석은 질문 일 수 있지만 1이 "true"로, 0이 "false"로 바뀌도록 부울 값을 문자열로 변환 할 수있는 방법이 있습니까?if 문을 사용할 수 있지만 언어 또는 표준 라이브러리로이를 수행 할 수있는 방법이 있는지 아는 것이 좋습니다.게다가 저는 pedant입니다.:)

도움이 되었습니까?

해결책

C ++ 언어 자체를 사용하는 것은 어떻습니까? 라코 디스

업데이트 :

콘솔 출력없이 4 줄 이상의 코드를 원하면 cppreference.com의 std::boolalphastd::noboolalpha에 대한 페이지 입니다.

추가적으로 std::boolalpha를 사용하면 std::cout의 전역 상태가 수정됩니다. 원래 동작을 복원 할 수 있습니다. 여기로 이동하여std::cout 상태 .

다른 팁

우리는 C ++에 대해 이야기하고 있습니까?왜 우리는 여전히 매크로를 사용하고 있습니까!?

C ++ 인라인 함수는 매크로와 동일한 속도를 제공하며 유형 안전성 및 매개 변수 평가의 추가 이점을 제공합니다 (Rodney 및 dwj가 언급 한 문제를 방지합니다. 라코 디스

그 외에도 특히 받아 들여진 답변에 대해 몇 가지 다른 불만이 있습니다. :) 라코 디스

건배 :) <시간>

@DrPizza : 이렇게 간단한 함수를 위해 전체 부스트 라이브러리를 포함 하시겠습니까?농담 이시죠?

C ++에는 적절한 문자열이 있으므로 사용하는 것이 좋습니다. 표준 헤더 문자열에 있습니다. #include 을 사용합니다. 더 이상 strcat / strcpy 버퍼 오버런이 없습니다. 더 이상 null 종결자가 누락되지 않습니다. 더 이상 복잡한 수동 메모리 관리가 없습니다. 적절한 값 의미를 가진 적절한 계수 문자열

C ++에는 bool을 사람이 읽을 수있는 표현으로 변환하는 기능도 있습니다. 이전에 iostream 예제에서 힌트를 보았지만 텍스트를 콘솔 (또는 fstreams, 파일)로만 보낼 수 있기 때문에 약간 제한적입니다. 다행히도 C ++의 설계자들은 완전한 바보가 아니 었습니다. 콘솔이나 파일이 아니라 자동으로 관리되는 문자열 버퍼가 지원하는 iostream도 있습니다. 이를 스트링 스트림이라고합니다. #include 을 가져옵니다. 그러면 다음과 같이 말할 수 있습니다. 라코 디스

물론이 모든 것을 입력하고 싶지는 않습니다. 다행히 C ++에는 Boost 라는 편리한 타사 라이브러리가있어 여기서 도움을받을 수 있습니다. Boost에는 lexical_cast라는 멋진 기능이 있습니다. 다음과 같이 사용할 수 있습니다. 라코 디스

이제 일부 매크로보다 오버 헤드가 더 높다는 것은 사실입니다. stringstreams는 사용자가 신경 쓰지 않는 로케일을 처리하고 동적 문자열 (메모리 할당 포함)을 생성하는 반면 매크로는 리터럴 문자열을 생성 할 수 있으므로이를 방지합니다. 그러나 반대로 stringstream 메서드는 인쇄 가능한 표현과 내부 표현 사이의 많은 변환에 사용될 수 있습니다. 거꾸로 실행할 수 있습니다. 예를 들어 boost :: lexical_cast ( "true")는 옳은 일을합니다. 숫자와 함께 사용할 수 있으며 실제로 올바른 형식의 I / O 연산자가있는 모든 유형을 사용할 수 있습니다. 따라서 매우 다양하고 유용합니다.

이 모든 작업을 마친 후에도 프로파일 링 및 벤치마킹 결과 lexical_cast가 용인 할 수없는 병목 현상이 발견되면 그것이 매크로 공포를 고려해야 할 때입니다.

괜찮습니다 : 라코 디스

하지만 더 C ++ 스타일을 원한다면 : 라코 디스

매크로를 사용하기로 결정한 경우 (또는 향후 프로젝트에서 C를 사용하는 경우) 매크로 확장에서 'b'주위에 괄호를 추가해야합니다 (아직 다른 사람의 콘텐츠를 편집 할 포인트가 충분하지 않습니다).

라코 디스

숨겨진 순서로부터 보호하는 방어 프로그래밍 기술입니다.-작업 오류;즉, 모든 컴파일러에 대해 어떻게 평가 되나요? 라코 디스

비교 라코 디스

다음과 같이 printf에서 삼항을 사용합니다. 라코 디스

매크로 사용하는 경우 : 라코 디스

그런 다음 'b'로 전달하는 모든 것이 부작용이 없는지 확인해야합니다.그리고 컴파일 오류가 발생할 수 있으므로 'b' 주위의 대괄호를 잊지 마십시오.

C ++ 11을 사용하면 람다를 사용하여 약간 더 간결한 코드를 얻을 수 있습니다. 라코 디스

인화 : 라코 디스

이 게시물은 오래되었지만 이제 std::to_string를 사용하여 많은 변수를 std::string로 변환 할 수 있습니다.

http://en.cppreference.com/w/cpp/string/ basic_string / to_string

boolalpha를 사용하여 bool을 문자열로 인쇄합니다. 라코 디스

C ++ 참조

매크로가 가장 적합 할 수 있다는 데 동의합니다.방금 테스트 케이스를 작성했습니다 (저는 C / C ++에 능숙하지 않지만 재미있게 들렸습니다). 라코 디스

문자열을 문자 배열로 직접 볼 수있는 한 std::string가 C ++에서 문자열을 일급 시민으로 나타낸다고 확신하기는 정말 어렵습니다.

게다가 할당과 경계를 결합하는 것은 어쨌든 나에게 나쁜 생각 인 것 같습니다.

이 매크로를 사용해보십시오."true"또는 false를 표시하려면 PRINTBOOL (var)로 바꾸십시오. 여기서 var는 텍스트를 원하는 부울입니다. 라코 디스

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