일부 변수에 대해 몇 가지 검사를 수행하고 값을 반환하는 메서드가있는 클래스가 있습니다. 결과적으로 경고 메시지가 인쇄됩니다. 메소드가 클래스 변수를 변경하지 않기 때문에 const로 정의했습니다. 그러나 홍수 출력을 피하기 위해 몇 가지 (또는 단지 하나) 인쇄 후에 경고 인쇄를 억제하고 싶습니다. 메서드를 const로 유지하는 솔루션을 찾을 수 없었습니다. 그게 가능합니까 (쉬운)?const 메서드의 메시지 출력을 표시하지 않습니다.
답변
사용 방법 mutable
카운터 사용 하시겠습니까? 그것이 객체의 상태가 아니기 때문에 받아 들여야한다고 생각합니다. 그것은 내부 논리 상태입니다. 이
class Printer
{
public:
Printer() : counter(0) {}
void output() const
{
if (counter++ < max_warnings)
{
std::cout << "Something special" << std::endl;
}
}
private:
static const size_t max_warnings = 5;
mutable size_t counter;
};
당신은 (영원히에서 카운터 예를 고수 할 수
class Printer
{
public:
Printer() : counter(0) {}
void output() const
{
if (counter++ < max_warnings)
{
std::cout << "Something special" << std::endl;
}
}
private:
static const size_t max_warnings = 5;
mutable std::atomic<size_t> counter;
};
원자 카운터 멀티 스레딩 예에 대해 많은 의견이 있기 때문에 같은
뭔가)
- , 당신은 질문에 코드를 추가 할이 객체 솔루션은 실제 문제가 당신에 따라 달라집니다
에없는 카운터 등의 변수를 사용 const_cast<int>(counter)
const
캐스팅?나는 디자인 상 const_cast를 피할 것이고 카운터는 모든 인스턴스가 특정 카운터를 가져야하므로 객체에 있어야합니다. 나는이 사건이 매우 잘 맞는 것이라고 생각한다. 코드 조각은 ForEveR의 대답을 참조하십시오. 그는 정확히 요점을 가지고 있습니다. – DarioP
@DarioP : 그게 내가 코드 스 니펫을 요청한 이유입니다. :) 그러나 질문 제목은이 열림을 남기므로 내 제안은 다른 사람들에게 옵션이 될 수 있습니다.그리고 _suppress messages_라는 단어는 컴파일러 경고에 맞서 싸우는 것처럼 보였습니다 ... – Wolf
... 그래서 나는 아직 승인되지 않았을 수도있는 귀하의 질문을 편집했습니다. – Wolf
- 1. 프로그램이 출력을 표시하지 않습니다.
- 2. WP_Debug가 출력을 표시하지 않습니다.
- 3. 포트가 출력을 표시하지 않습니다.
- 4. document.write 출력을 표시하지 않습니다
- 5. 쿼리가 출력을 표시하지 않습니다.
- 6. ajax가 출력을 표시하지 않습니다.
- 7. System.cmd는 Elixir에서 출력을 표시하지 않습니다.
- 8. list.ToString이 올바른 출력을 표시하지 않습니다.
- 9. Gradle이 콘솔 출력을 표시하지 않습니다.
- 10. VS2008이 추적 출력을 표시하지 않습니다.
- 11. PHP가 이중 출력을 표시하지 않습니다.
- 12. 코드가 출력을 제대로 표시하지 않습니다.
- 13. AppEngine dev_appserver.py가 출력을 표시하지 않습니다.
- 14. SQL Server DBCC 출력을 표시하지 않습니다.
- 15. NSTableView는 objectValueForTableColumn 메서드의 반환 값을 표시하지 않습니다.
- 16. const 멤버 함수/메서드의 유용성
- 17. Raven의 SentryHandler가 파일로 StreamHandler 출력을 표시하지 않습니다.
- 18. MemberShip 메서드의 오류 메시지
- 19. Python Tkinter 모듈에서 출력을 표시하지 않습니다.
- 20. Eclipse PyDev가 전체 출력을 표시하지 않습니다.
- 21. 은 ios4에서 외부 비디오 출력을 표시하지 않습니다.
- 22. Jinja2에서 "None"출력을 문자열로 표시하지 않습니다.
- 23. 빌드 파이프 라인이 콘솔 출력을 표시하지 않습니다.
- 24. 간단한 Qt 프로그램이 빌드되지만 출력을 표시하지 않습니다.
- 25. 간단한 계산기 프로그램이 적절한 출력을 표시하지 않습니다.
- 26. 실행 파일 jar가 출력을 표시하지 않습니다.
- 27. 와일드 카드 검색에서 출력을 표시하지 않습니다.
- 28. PHP가 콘솔의 모든 출력을 표시하지 않습니다.
- 29. Atom 패키지 linter-flake8 출력을 표시하지 않습니다.
- 30. Ruby가 내부 프로세스의 출력을 표시하지 않습니다.
함수의 로컬 카운터를 정적 변수로 정의 할 수 있습니다. –