화살표 연산자`->`대신 무엇을 사용할 수 있습니까?
화살표 연산자 ( ->
)의 동의어는 무엇입니까?
다음 두 표현식은 동일합니다.
a->b
(*a).b
(Konrad가 언급했듯이 연산자 오버로딩에 따라 다르지만 이는 드문 경우입니다).
a->b
일반적으로 (*a).b
. 여기서 괄호는 연산자의 바인딩 강도 때문에 필요 *
하며 .
: 바인딩이 더 강하고 먼저 실행 *a.b
되기 때문에 작동하지 않습니다 .
. 따라서 이것은 *(a.b)
.
그러나 과부하에주의하십시오. ->
및 둘 다 *
과부하 될 수 있으므로 그 의미는 크게 다를 수 있습니다.
C ++ 언어는 ->
포인터를 역 참조하는 동의어로 화살표 연산자 ( )를 정의한 다음 .
해당 주소 에서 -operator 를 사용합니다 .
예를 들면 :
객체 anObject
, 및 포인터가있는 경우 aPointer
:
SomeClass anObject = new SomeClass();
SomeClass *aPointer = &anObject;
객체 메서드 중 하나를 사용하려면 포인터를 역 참조하고 해당 주소에 대한 메서드 호출을 수행합니다.
(*aPointer).method();
화살표 연산자로 작성할 수 있습니다.
aPointer->method();
화살표 연산자가 존재하는 주된 이유는 매우 일반적인 작업의 입력을 단축하고 포인터 역 참조를 둘러싼 괄호를 잊기 쉽습니다. 괄호를 잊은 경우 .-operator는 * -operator보다 더 강력하게 바인딩하고 예제를 다음과 같이 실행합니다.
*(aPointer.method()); // Not our intention!
다른 답변 중 일부는 C ++ 연산자가 오버로드 될 수 있으며 일반적이지 않다는 것을 모두 언급했습니다.
C ++ 0x에서 연산자는 함수 또는 람다 식의 반환 유형을 나타내는 두 번째 의미를 얻습니다.
auto f() -> int; // "->" means "returns ..."
나는 대부분 그것을 오른쪽에서 왼쪽으로 읽고 "in"이라고 부른다.
foo->bar->baz = qux->croak
된다 :
"foo에있는 bar의 baz가 qux에서 삐걱 거리는 소리가됩니다."
->
포인터가있는 데이터에 액세스 할 때 사용됩니다.
예를 들어 다음과 같이 int intVar 유형의 변수에 대한 포인터 ptr을 만들 수 있습니다.
int* prt = &intVar;
그런 다음 해당 포인터를 역 참조하여 해당 변수의 메모리 위치에 대한 숫자 값 대신 포인터가 가리키는 변수에 대한 함수를 호출하기 위해 foo와 같은 함수를 사용할 수 있습니다.
(*ptr).foo();
여기에 괄호가 없으면 컴파일러는 *(ptr.foo())
우리가 원하는 것이 아닌 연산자 우선 순위 로 인해 이것을 이해할 것 입니다.
이것은 실제로 타이핑과 동일합니다.
ptr->foo();
현상태대로 ->
역 참조하는 포인터 및 통화 기능 때문에 foo()
포인터가 우리를 가리키는 변수에.
마찬가지로 ->
클래스 멤버에 액세스하거나 설정하는 데 사용할 수 있습니다 .
myClass* ptr = &myClassMember;
ptr->myClassVar = 2;
->를 사용하여 함수를 정의 할 수 있습니다.
auto fun() -> int
{
return 100;
}
람다가 아닙니다. 정말 기능입니다. "->"는 함수의 반환 유형을 나타냅니다.
참고 URL : https://stackoverflow.com/questions/221346/what-can-i-use-instead-of-the-arrow-operator
'developer tip' 카테고리의 다른 글
contenteditable, 텍스트 끝에 캐럿 설정 (브라우저 간) (0) | 2020.08.14 |
---|---|
제한된 전역 없음 (0) | 2020.08.14 |
Enter 키를 누를 때 TextBox 바인딩 (0) | 2020.08.14 |
jQuery DatePicker 컨트롤의 팝업 위치를 변경하는 방법 (0) | 2020.08.14 |
쉘 스크립트 : 쉘 스크립트 내에서 파이썬 프로그램 실행 (0) | 2020.08.14 |