const int vs. int const C ++ 및 C의 함수 매개 변수
빠른 질문:
int testfunc1 (const int a)
{
return a;
}
int testfunc2 (int const a)
{
return a;
}
이 두 기능이 모든 측면에서 동일합니까 아니면 차이가 있습니까? C 언어에 대한 답변에 관심이 있지만 C ++ 언어에 흥미로운 것이 있으면 알고 싶습니다.
const T
과 T const
동일하다. 포인터 유형을 사용하면 더 복잡해집니다.
const char*
상수에 대한 포인터입니다char
char const*
상수에 대한 포인터입니다char
char* const
(mutable)에 대한 상수 포인터char
즉, (1)과 (2)는 동일하다. 포인터가 아닌 포인터를 만드는 유일한 방법은 접미사 const
를 사용하는 것 const
입니다.
이것이 많은 사람들이 항상 const
유형의 오른쪽에 배치하는 것을 선호하는 이유 ( "동부 const"스타일) : 유형에 대한 위치를 일관되고 기억하기 쉽도록 만듭니다 (비례 적으로 초보자에게 쉽게 가르치는 것처럼 보입니다) ).
요령은 선언을 거꾸로 읽는 것입니다 (오른쪽에서 왼쪽으로).
const int a = 1; // read as "a is an integer which is constant"
int const a = 1; // read as "a is a constant integer"
둘 다 같은 것입니다. 따라서:
a = 2; // Can't do because a is constant
다음과 같은 더 복잡한 선언을 다룰 때 역전 읽기 트릭이 특히 유용합니다.
const char *s; // read as "s is a pointer to a char that is constant"
char c;
char *const t = &c; // read as "t is a constant pointer to a char"
*s = 'A'; // Can't do because the char is constant
s++; // Can do because the pointer isn't constant
*t = 'A'; // Can do because the char isn't constant
t++; // Can't do because the pointer is constant
다른 점이 없다. 둘 다 "a"를 변경할 수없는 정수로 선언합니다.
차이가 나타나기 시작하는 위치는 포인터를 사용할 때입니다.
둘 다 :
const int *a
int const *a
"a"를 변경하지 않는 정수에 대한 포인터로 선언하십시오. "a"는 지정할 수 있지만 "* a"는 지정할 수 없습니다.
int * const a
"a"를 정수에 대한 상수 포인터로 선언합니다. "* a"는 할당 할 수 있지만 "a"는 지정할 수 없습니다.
const int * const a
"a"를 상수 정수에 대한 상수 포인터로 선언합니다. "a"나 "* a"는 할당 할 수 없습니다.
static int one = 1;
int testfunc3 (const int *a)
{
*a = 1; /* Error */
a = &one;
return *a;
}
int testfunc4 (int * const a)
{
*a = 1;
a = &one; /* Error */
return *a;
}
int testfunc5 (const int * const a)
{
*a = 1; /* Error */
a = &one; /* Error */
return *a;
}
포인터의 경우에 대한 약간의 설명은 순서가있을 수 있지만, Prakash는 선언이 동일하다는 것이 맞습니다.
"const int * p"는 해당 포인터를 통해 int를 변경할 수없는 int에 대한 포인터입니다. "int * const p"는 다른 int를 가리 키도록 변경할 수없는 int에 대한 포인터입니다.
http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.5를 참조 하십시오 .
const int
is identical to int const
, as is true with all scalar types in C. In general, declaring a scalar function parameter as const
is not needed, since C's call-by-value semantics mean that any changes to the variable are local to its enclosing function.
This isn't a direct answer but a related tip. To keep things straight, I always use the convection "put const
on the outside", where by "outside" I mean the far left or far right. That way there is no confusion -- the const applies to the closest thing (either the type or the *
). E.g.,
int * const foo = ...; // Pointer cannot change, pointed to value can change
const int * bar = ...; // Pointer can change, pointed to value cannot change
int * baz = ...; // Pointer can change, pointed to value can change
const int * const qux = ...; // Pointer cannot change, pointed to value cannot change
They are the same, but in C++ there's a good reason to always use const on the right. You'll be consistent everywhere because const member functions must be declared this way:
int getInt() const;
It changes the this
pointer in the function from Foo * const
to Foo const * const
. See here.
Yes, they are same for just int
and different for int*
I think in this case they are the same, but here is an example where order matters:
const int* cantChangeTheData;
int* const cantChangeTheAddress;
참고URL : https://stackoverflow.com/questions/162480/const-int-vs-int-const-as-function-parameter-in-c-and-c
'program story' 카테고리의 다른 글
RegExp의 exec () 함수와 String의 match () 함수의 차이점은 무엇입니까? (0) | 2020.07.30 |
---|---|
장고 템플릿의 계수 % (0) | 2020.07.30 |
edittext의 텍스트를 확인하는 방법은 전자 메일 주소입니까? (0) | 2020.07.29 |
HTML의 숨겨진 기능 (0) | 2020.07.29 |
“유사하게 보이는”유니 코드 문자를 비교하는 방법은 무엇입니까? (0) | 2020.07.29 |