휘발성은 매개 변수에 적용될 수 있지만 매개 변수에 직접 적용될 때 과부하가되지는 않습니다. 그러나이 매개 변수를 사용하여 매개 변수의 유형을 구별 할 수 있습니다. 예를 들어,이 법적 :
void f(int &p) {}; //reference to int
void f(volatile int &p) {}; //reference to volatile int
이되지 않습니다 :
void f(int p) {};
void f(volatile int p) {};
이유는 첫 번째 예제에서 참조가 휘발성하지 것입니다,하지만 정수이다. 두 번째 예에서 두 유형 모두 정수이며 따라서 동일한 유형입니다.
또한 휘발성 방법이 있습니다. 그들은 this
을 휘발성으로 선언하는 것과 유사합니다. this
포인터가 아니라 포함 된 유형 자체이기 때문에, 다음은 법적 :
void c::f(int p) {};
void c::f(int p) volatile {};
그것은 const
에 의해 오버로드에 대한 모든 동일합니다.
C++ 표준의 관련 부분은 §13.1 과부하 선언입니다. C++ 11 초안에서 n3290 :
const 및/또는 volatile의 존재 여부와 만 다른 매개 변수 선언은 동일합니다. 즉, 선언, 정의 또는 호출중인 함수를 결정할 때 각 매개 변수 유형에 대한 const 및 volatile 유형 지정자가 무시됩니다. [실시 예 :
typedef const int cInt;
int f(int);
int f(const int); // redeclaration of f(int)
int f(int) { /* ... */ } // definition of f(int)
int f(cInt) { /* ... */ } // error: redefinition of f(int)
- 엔드 예]
만 파라미터 타입 사양의 최 레벨에서 CONST 휘발성 타입 지시자는 이러한 방식으로 무시된다; 매개 변수 유형 사양에 포함 된 const 및 volatile 유형 지정자는 중요하며 오버로드 된 함수 선언을 구별하는 데 사용할 수 있습니다 . 특히, 어떤 유형 T에 대해서도 , reference to const T
및 reference to volatile T
과 같이 pointer to T
, pointer to const T
및 pointer to volatile T
이 별개 매개 변수 유형으로 간주됩니다.
124) 매개 변수 유형에 함수 포인터가있는 경우와 같이 함수 유형에 대한 매개 변수 유형 사양의 최 외각에있는 const 및 volatile 유형 지정자 내부 함수 유형은 도 무시됩니다.
추가 된 C++ 태그; 그것이 당신이 말하는 언어가 아닌 경우 질문을 편집하여 오히려 중요한 사실을 언급하고 적절하게 다시 태그하십시오. – Mat
이것은'const'와 비슷합니다. 만약 당신이'volatile' 수식 된 객체를 가지고 있다면'volatile' 함수 만 호출 할 수 있습니다. –
오, 나는 내 마음을 미끄러졌습니다. –