2017-01-29 12 views
10

이 기능은 이전 기능이지만 user defined literals에서 읽는 것으로 알고 있습니다.밑줄이 아닌 이름이 UDL의 구현에 예약 된 이유는 무엇입니까?

return_t operator "" _a(long); // Literal operator for user-defined INTEGRAL literal 

나는

선도 밑줄이 필요하다는 것을 생각 나게했다. (만 표준 라이브러리는 밑줄없이 리터럴을 정의 할 수있다.) (A)

이 지금까지 구현 예를 들어, 좋은 사람을 underscorey 이름으로 일을 우리를 떠난 패턴을 깰 것으로 보인다

  • 가 대문자 다음에 밑줄로 시작

    1. 이중 밑줄을 포함하는 이름은 구현에 있습니다 예약
    ,

    따옴표 (A)는 규칙 (2)이있는 경우 다소 위험합니다. 그래서 왜 불일치?

  • +3

    이렇게하면 표준 라이브러리에서 "자연스러운"접미사를 얻을 수 있으며 사용자 정의 접미사를 그대로 볼 수 있습니다. –

    답변

    9

    언어에 사용자 정의 리터럴이 추가되기 전에 모든 표준 리터럴은 밑줄로 시작하지 않는 시퀀스 (예 : long int 리터럴의 경우 123L)를 사용했습니다. 따라서 일관성을 유지하기 위해 표준 리터럴은 특별한 접두어없이 네임 스페이스를 가져오고 UDL은 _을 사용하여 구별됩니다.