메소드 선언 후 const 수정자는 무엇을 의미합니까?

 

개인적으로 질문했는데 이게 무슨 뜻인가요? 포럼에서 Rushil은 답변을 제공하기 위해 유용한 예를 찾았기 때문에 설명합니다.
그건 그렇고, 영어를 할 수 있다면 MQL이 아니라 C++로 Google에서 영어로 그런 질문을하는 것이 매우 유용합니다. 예를 들어 다음과 같이
http://www.google.com/search?q=const+in+c%2B%2B+after+function&oq=const+in+c%2B%2B&sourceid=chrome&ie=UTF-8
순수 프로그래밍 포럼에 대한 많은 링크가 있으며 C++는 MQL과 매우 유사합니다.

주석을 러시아어로 번역하고 MQL과의 호환성을 위해 약간 수정했습니다. 아래에 스크립트를 첨부하고 컴파일하면 모든 것이 명확해집니다.

 struct X
{
     void foo() const 
    {
        _x = 42 ; // ERROR! метод объявлен, как const, не можем менять члены 
        _y = 42 ; // ERROR! 
    }

     void bar(X& obj) const 
    {
        obj._x = 42 ; // OK! obj передается по ссылке и не имеет модификатора const
        _x = 42 ; // ERROR!
    }

     void bar(X const & obj) 
    {
        obj._x = 42 ; // ERROR! obj передается по ссылке, как const
        obj._y = 42 ; // ERROR! obj передается по ссылке, как const
        _x = 42 ; // OK! метод объявлен без const на сонце
    }

     int _x, _y;
};
파일:
TestConst.mq4  2 kb
 
Alexey Volchanskiy :

개인적으로 질문을 던졌는데 그게 무슨 뜻인가요? 포럼에서 Rushil이 답변을 제공하기 때문에 유용한 예를 찾았습니다.
그건 그렇고, 영어를 할 수 있다면 MQL이 아니라 C++로 Google에서 영어로 그런 질문을하는 것이 매우 유용합니다. 예를 들어 다음과 같이
http://www.google.com/search?q=const+in+c%2B%2B+after+function&oq=const+in+c%2B%2B&sourceid=chrome&ie=UTF-8
순수 프로그래밍 포럼에 대한 많은 링크가 있으며 C++는 MQL과 매우 유사합니다.

주석을 러시아어로 번역하고 MQL과의 호환성을 위해 약간 수정했습니다. 아래에 스크립트를 첨부하고 컴파일하면 모든 것이 명확해집니다.

문서에 명확하게 나와 있지 않습니까?

const 수정자가 있는 메서드 는 영구적이라고 하며 해당 클래스의 암시적 멤버를 수정할 수 없습니다. 상수 클래스 함수와 상수 매개변수를 선언하는 것을 const-correctness control 이라고 합니다. 이 컨트롤 덕분에 컴파일러가 개체 값의 불변성을 모니터링하고 위반 시 컴파일 단계에서 오류를 발생시킨다는 것을 확신할 수 있습니다.

const 수정자는 클래스 선언 내에서 인수 목록 뒤에 배치됩니다. 클래스 외부의 정의에는 const 수정자도 포함되어야 합니다 .

무결성 제어 사용에 찬성하는 추가 인수는 이 경우 컴파일러가 특수 최적화를 수행한다는 것입니다. 예를 들어 읽기 전용 메모리에 상수 개체를 할당합니다.

정적 함수는 const 수정자로 정의할 수 없습니다. 이 수정자는 함수가 호출될 때 인스턴스 멤버가 변경되지 않도록 보장하기 때문입니다. 그러나 위에서 언급한 것처럼 정적 함수는 정의에 따라 비정적 클래스 멤버에 액세스할 수 없습니다.  

https://www.mql5.com/ru/docs/basis/oop/staticmembers

게다가 내 생각에 당신은 구조화의 가장 성공적인 예를 제시하지 않았습니다(첫 번째 방법, 그 다음 데이터 멤버). 그리고 그 문제에 대해서는 이 모든 것을 구조가 아니라 클래스로 래핑하는 것이 좋습니다. 구조는 일반적으로 데이터 모음으로 사용됩니다(메소드 제외).

Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Статические члены класса
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Статические члены класса
  • www.mql5.com
Основы языка / Объектно-ориентированное программирование / Статические члены класса - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Kozitsyn :

문서에 명확하게 나와 있지 않습니까?

https://www.mql5.com/ru/docs/basis/oop/staticmembers

게다가 내 생각에 당신은 구조화의 가장 성공적인 예를 제시하지 않았습니다(첫 번째 방법, 그 다음 데이터 멤버). 그리고 그 문제에 대해서는 이 모든 것을 구조가 아닌 클래스로 래핑하는 것이 좋습니다. 구조는 일반적으로 데이터 모음으로 사용됩니다(메소드 없음).

기여

그래서 나는 부두 어딘가에서 그들이 이것에 대해 썼지만 즉시 그것을 찾지 못했다는 것을 기억했습니다. stackoverflow를 사용한 빠른 분리의 예. 데이터를 어디에 둘 것인지는 프로그래머의 개인적인 문제이지만, 처음에는 제가 직접 넣었습니다. 구조체나 클래스를 사용하는 것은 프로그래머의 개인적인 문제입니다)))

 
Alexey Volchanskiy :

기여

그래서 나는 부두 어딘가에서 그들이 이것에 대해 썼지만 즉시 그것을 찾지 못했다는 것을 기억했습니다. stackoverflow를 사용한 빠른 분리의 예. 데이터를 어디에 둘 것인지는 프로그래머의 개인적인 문제이지만, 처음에는 제가 직접 넣었습니다. 구조체나 클래스를 사용하는 것은 프로그래머의 개인적인 문제입니다)))

그래서 당신은 "개인 사업"에 대해 많이 말할 수 있습니다. 당신만이 누군가에게 설명하고 개인적이 아니라 공개적으로 설명합니다. 그리고 당신의 "사생활"은 좋은 프로그래밍 스타일과 상충됩니다. 그리고 이것을 설명하는 사람과 다른 많은 사용자는 이것을 좋은 스타일로 인식할 수 있지만 그렇지 않습니다.

그리고 여기에서 코스를 원했던(또는 가르쳤을 수도 있는) 사람에 대해 그러한 "빠른 실수"는 많은 것을 말해줍니다.

 
const 수정자가 Метод с модификатором 는 영구적이라고 하며 해당 클래스의 암시적 멤버를 수정할 수 없습니다.
명시적 구성원과 암시적 구성원은 무엇입니까?
 
Dmitry Fedoseev :
명시적 구성원과 암시적 구성원은 무엇입니까?

분명히 이 컨텍스트에서 이들은 이 메서드를 호출하는 멤버입니다. 즉, 메소드에서 이를 통해 접근할 수 있는 멤버들이다.

 

C++에서 이는 메소드가 변경 가능으로 선언된 멤버를 제외하고 클래스의 멤버를 변경할 수 없음을 의미합니다.

왜냐하면 MQL에서는 그러한 양 고추 냉이를 기다릴 수 없습니다. 즉, 원칙적으로 메서드는 개체를 변경할 수 없습니다.

 
Комбинатор :

C++에서 이는 메소드가 변경 가능으로 선언된 멤버를 제외하고 클래스의 멤버를 변경할 수 없음을 의미합니다.

왜냐하면 MQL에서는 그러한 양 고추 냉이를 기다릴 수 없습니다. 즉, 원칙적으로 메서드는 개체를 변경할 수 없습니다.

const 메서드는 호출한 개체만 변경할 수 없습니다. 그러나 const 수정자 없이 다른 개체가 메서드에 전달되면 해당 개체(메소드)가 이를 성공적으로 변경할 수 있습니다.
 
Alexey Kozitsyn :
const 메서드는 호출 한 개체만 변경할 수 없습니다.
버그인가요?
 
Alexey Volchanskiy :
버그인가요?
무슨 말인지 설명해?
 
상수 방법 은 "우리는 최고를 원했지만 항상 그랬듯 결과가 나왔다"는 속담의 또 다른 예입니다. 나는 C ++의 경우 이것이 일반적으로 모토라고 생각합니다. 실질적인 이점은 없지만 OOP 프로그램의 설계를 상당히 복잡하게 만듭니다. 수정된 객체의 유형을 제어하는 데 지속적으로 필요합니다(또한 상수여야 함).