Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SF: Source 번역 제출 #149

Merged
merged 8 commits into from
Jul 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 31 additions & 28 deletions sections/Class.md

Large diffs are not rendered by default.

16 changes: 8 additions & 8 deletions sections/Expr.md
Original file line number Diff line number Diff line change
Expand Up @@ -179,9 +179,8 @@ ISO C++ 표준 라이브러리는 널리 알려져있으며 테스트가 잘된

가독성이 좋아진다. 리소스 점유를 최소화할 수 있다. 값의 잘못된 사용을 피할 수 있다.

##### Alternative Formulation

불필요하게 큰 범위에 변수를 선언하지 마라
**Alternative Formulation**:
불필요하게 큰 스코프에 변수를 선언하지 마라

##### Example

Expand Down Expand Up @@ -2389,7 +2388,7 @@ C 스타일 타입변환이 위험한 이유는 어떤 형태로의 변환도
##### Enforcement

* `const_cast`를 지적한다.
* 이 규칙은 [타입 안정성 분석](#Pro-type-constcast)과 관련 있다
* 이 규칙은 [타입 안정성 분석](./Profile.md#Pro-type-constcast)과 관련 있다

### <a name="Res-range-checking"></a>ES.55: 범위 검사가 필요없게 하라

Expand All @@ -2416,7 +2415,7 @@ C 스타일 타입변환이 위험한 이유는 어떤 형태로의 변환도

복제를 막고 성능을 향상시키기 위해 복사보다는 이동을 사용한다.

이동 연산은 보통 빈 개체를 남긴다 ([C.64](#Rc-move-semantic)). 이는 기대밖의 결과 혹은 위험으로 이어질 수 있다. 가능하다면 lvalue로부터 이동하는 것을 피하려 해야한다 (lvalue에 나중에 접근할 수도 있다).
이동 연산은 보통 빈 개체를 남긴다 ([C.64](./Class.md#Rc-move-semantic)). 이는 기대밖의 결과 혹은 위험으로 이어질 수 있다. 가능하다면 lvalue로부터 이동하는 것을 피하려 해야한다 (lvalue에 나중에 접근할 수도 있다).

##### Notes

Expand Down Expand Up @@ -2787,7 +2786,7 @@ C 스타일 `(T)e`변환과 함수형 타입변환 `T(e)`를 지적한다

이 규칙은 명백하고 잘 알려진 언어 규칙이지만, 따르기 어렵다.
큰 부담(overhead)없이 이 규칙을 준수하기 위해서는 좋은 코딩스타일, 라이브러리 지원, 그리고 정적 분석기가 필요하다.
[C++'s resource- and type-safety model](#Stroustrup15) 논의에서의 중요 부분 중 하나다.
[C++'s resource- and type-safety model](./Bibliography.md#Stroustrup15) 논의에서의 중요 부분 중 하나다.

##### See also

Expand All @@ -2796,7 +2795,7 @@ C 스타일 `(T)e`변환과 함수형 타입변환 `T(e)`를 지적한다
* 수명주기 문제를 피하려면 [shared_ptr](#Rf-shared_ptr)를 사용하라
* `nullptr`가 허용되지 않는다면 [references](#Rf-ptr-ref)를 사용하라
* 의도치 않은 `nullptr`를 일찍 잡아내기 위해 [not_null](#Rf-not_null)을 사용하라
* Use the [bounds profile](#SS-bounds) to avoid range errors.
* 범위 오류를 피하고 싶다면 [경계 안전성 프로필](./Profile.md#SS-bounds)을 참고하라

##### Example

Expand Down Expand Up @@ -3859,8 +3858,9 @@ C 스타일 문자열을 사용한다면 `<cstring>`의 함수들을 잘 알아
예시와 같은 (완전히 합법인) 생성 코드는 실제로는 찾아내기 어렵고 많은 오류의 원인이다.

다음과 같은 코드를 고려해보라:

```c++
unsigned area(unsigned height, unsigned width) { // [see also](#Ri-expects)
unsigned area(unsigned height, unsigned width) { // see also: I.6 사전 조건을 표현하고 싶다면 `Expects()`를 사용하라
return height * width;
}
// ...
Expand Down
34 changes: 17 additions & 17 deletions sections/Interfaces.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@

##### References

[함수 호출에 대한 규칙](#SS-call)
[함수 호출에 대한 규칙](./Functions.md#SS-call)

##### Note

Expand Down Expand Up @@ -364,7 +364,7 @@ C++11에 도입된 `std::chrono::duration` 타입은 지속 시간의 단위를

##### References

`Expects()`는 [GSL](#S-gsl)에 기술되어 있다.
`Expects()`는 [GSL](#./GSL.mdS-gsl)에 기술되어 있다.

##### Note

Expand Down Expand Up @@ -418,7 +418,7 @@ C++11에 도입된 `std::chrono::duration` 타입은 지속 시간의 단위를

##### Note

`unsigned`를 사용하는 것은 [값이 음수가 아니라고 보장하는](#Res-nonnegative) 문제를 회피하는 좋은 방법이 아니다.
`unsigned`를 사용하는 것은 [값이 음수가 아니라고 보장하는](./Expr.md#Res-nonnegative) 문제를 회피하는 좋은 방법이 아니다.

##### Enforcement

Expand Down Expand Up @@ -513,7 +513,7 @@ C++11에 도입된 `std::chrono::duration` 타입은 지속 시간의 단위를

이제 버그가 분명하게 보인다. (단, 주석을 읽는 사람에게만 보인다.)

더 나은 방법은 [RAII](#Rc-raii)를 사용해 사후 조건("잠금을 해제해야 함")이 코드에 적용되도록 하는 것이다:
더 나은 방법은 [RAII](./Class.md#Rc-raii)를 사용해 사후 조건("잠금을 해제해야 함")이 코드에 적용되도록 하는 것이다:

```c++
void manipulate(Record& r) // best
Expand Down Expand Up @@ -559,7 +559,7 @@ C++11에 도입된 `std::chrono::duration` 타입은 지속 시간의 단위를

##### Alternative

이 리소스는 반드시 해제되어야 한다" 형태의 사후 조건은 [RAII](#Rc-raii)를 통해 가장 잘 나타낼 수 있다.
이 리소스는 반드시 해제되어야 한다" 형태의 사후 조건은 [RAII](./Class.md#Rc-raii)를 통해 가장 잘 나타낼 수 있다.

##### Note

Expand Down Expand Up @@ -600,7 +600,7 @@ C++11에 도입된 `std::chrono::duration` 타입은 지속 시간의 단위를

##### See Also

[제너릭 프로그래밍](#SS-GP)과 [컨셉](#SS-t-concepts)을 참고하라
[제너릭 프로그래밍](./Templates.md#SS-GP)과 [컨셉](./Templates.md#SS-t-concepts)을 참고하라

##### Enforcement

Expand Down Expand Up @@ -669,9 +669,9 @@ C++11에 도입된 `std::chrono::duration` 타입은 지속 시간의 단위를

* 명시적인 오류 검사 및 처리는 종종 예외 처리만큼 많은 시간과 공간을 쓰기도 한다.
* 간결한 코드는 종종 예외 처리를 포함하더라도 더 좋은 성능을 갖는다. (프로그램과 최적화를 통해 실행 경로를 단순화한다)
* 성능이 중요한 코드의 좋은 규칙은 오류 검사를 코드의 핵심 부분 바깥으로 옮기는 것이다 ([검사](#Rper-checking)).
* 성능이 중요한 코드의 좋은 규칙은 오류 검사를 코드의 핵심 부분 바깥으로 옮기는 것이다 ([검사](./Performance.md#Rper-checking)).
* 장기적으로 보면 정돈된(regular) 코드가 더 잘 최적화된다.
* 성능에 대해 지적하기 전에는 항상 신중하게 [측정하라](#Rper-measure).
* 성능에 대해 지적하기 전에는 항상 신중하게 [측정하라](./Performance.md#Rper-measure).

##### See Also
사전 조건, 사후 조건의 위반 보고를 위한 [I.5](#Ri-pre) 및 [I.7](#Ri-post).
Expand Down Expand Up @@ -714,12 +714,12 @@ C++11에 도입된 `std::chrono::duration` 타입은 지속 시간의 단위를

##### Alternative

[소유권 전달](#Rr-smartptrparam)은 배타적 소유를 위한 `unique_ptr`와 공유를 위한 `shared_ptr` 같은 스마트 포인터를 사용하라.
[소유권 전달](./Resource.md#Rr-smartptrparam)은 배타적 소유를 위한 `unique_ptr`와 공유를 위한 `shared_ptr` 같은 스마트 포인터를 사용하라.
하지만 이는 개체 그 자체를 반환하는 것보다 덜 아름답고 덜 효율적이다.
오직 참조로 사용하도록 할때만 스마트 포인터를 사용하라.

ABI 호환성 요구 사항 또는 리소스 부족으로 인해 오래된 코드를 수정할 수 없는 경우가 있다.
이 경우, [가이드라인 지원 라이브러리](#S-gsl)의 `owner`를 사용해 포인터의 소유권을 표시하라:
이 경우, [가이드라인 지원 라이브러리](./GSL.md#S-gsl)의 `owner`를 사용해 포인터의 소유권을 표시하라:

```c++
owner<X*> compute(args) // It is now clear that ownership is transferred
Expand All @@ -743,9 +743,9 @@ ABI 호환성 요구 사항 또는 리소스 부족으로 인해 오래된 코

##### See Also

* [인자 전달](#Rf-conventional)
* [스마트 포인터의 사용](#Rr-smartptrparam)
* [값 반환](#Rf-value-return)
* [인자 전달](./Functions.md#Rf-conventional)
* [스마트 포인터의 사용](./Resource.md#Rr-smartptrparam)
* [값 반환](./Functions.md#Rf-value-return)

##### Enforcement

Expand Down Expand Up @@ -776,7 +776,7 @@ ABI 호환성 요구 사항 또는 리소스 부족으로 인해 오래된 코

##### Note

`not_null`은 [가이드라인 지원 라이브러리](#S-gsl)에 정의되어 있다.
`not_null`은 [가이드라인 지원 라이브러리](./GSL.md#S-gsl)에 정의되어 있다.

##### Note

Expand Down Expand Up @@ -861,7 +861,7 @@ ABI 호환성 요구 사항 또는 리소스 부족으로 인해 오래된 코
##### Exception

`zstring`과 `czstring`을 사용해 C-스타일의 `\0`로 끝나는 문자열을 나타내라.
하지만 이렇게 할때는 범위 오류가 발생하지 않도록 [GSL](#GSL)의 `string_span`를 사용하라.
하지만 이렇게 할때는 범위 오류가 발생하지 않도록 [GSL](./GSL.md#GSL)의 `string_span`를 사용하라.

##### Enforcement

Expand Down Expand Up @@ -1193,8 +1193,8 @@ private 데이터는 클래스의 메모리 레이아웃에 영향을 주고 멤
istream& in = *inp;
```

이는 [초기화되지 않은 변수를 피하라](#Res-always)는 규칙을 위반한다.
또한 [소유권을 무시](#Ri-raw)하며, [마법 상수를 피하라](#Res-magic)는 규칙에도 반한다.
이는 [초기화되지 않은 변수를 피하라](./Expr.md#Res-always)는 규칙을 위반한다.
또한 [소유권을 무시](#Ri-raw)하며, [마법 상수를 피하라](./Expr.md#Res-magic)는 규칙에도 반한다.
특히, 이 코드는 누군가 어딘가에 아래와 같은 코드를 작성해야 한다는 점을 기억해야만 한다.

```c++
Expand Down
Loading