MQL5에서 함께 배우고 쓰기 - 페이지 32

 

글쎄, 나는 모르겠다 :) 우리 사무실에서 작성된 코드에 대해

std:: string s = "" ;

적어도 그들은 꾸짖을 것이고 IMHO, 그들은 옳은 일을 할 것입니다.

반복합니다. 이것은 문자열을 초기화해야 하는 경우 생성하는 동안 올바른 초기화가 필요한복잡한 유형 입니다. 이것은 확실히 MT5(4) 버그입니다.

생성 직후 어레이의 크기를 재설정해야 할 수 있습니까???

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
TheXpert :

글쎄, 나는 모르겠다 :) 우리 사무실에서 작성된 코드에 대해

적어도 그들은 꾸짖을 것이고 IMHO, 그들은 옳은 일을 할 것입니다.

변수를 사용하려면 먼저 값을 할당 해야 합니다(명시적으로 초기화). 아니면 동의하지 않습니까?

명시적 초기화는 선언 시 즉시 초기화가 필요함을 의미하지 않습니다. 그러나 나중에 초기화되지 않은 변수의 값이 일부 계산에 사용되면 결과를 예측할 수 없습니다.

 

당신은 나를 겁주고 있어요, 라시드.

클래스에는 논리적인 경우 기본값 설정을 포함하여 개체의 초기 초기화가 수행되는 생성자가 있습니다.

초기화가 발생하지 않으면 개체가 적절한 상태인지 알 수 있는 방법이 있어야 합니다. 문자열을 사용하면 기본값을 설정하는 것이 훨씬 더 논리적입니다.

std:: string s = "" ;

그러한 기록은 편집증이며 편집증은 선험적으로 정상적인 코드를 작성할 수 없습니다.

그래서 문자열이 초기화되지 않습니까??

 
TheXpert :
그래서 문자열이 초기화되지 않습니까??
물론 초기화되지만 빈 문자열 ""이 아니라 NULL로 초기화됩니다.
 
TheXpert :

당신은 나를 겁주고 있어요, 라시드.

클래스에는 논리적인 경우 기본값 설정을 포함하여 개체의 초기 초기화가 수행되는 생성자가 있습니다.

초기화가 발생하지 않으면 개체가 적절한 상태인지 알 수 있는 방법이 있어야 합니다. 문자열을 사용하면 기본값을 설정하는 것이 훨씬 더 논리적입니다.

그러한 기록은 편집증이며 편집증은 선험적으로 정상적인 코드를 작성할 수 없습니다.

그래서 문자열이 초기화되지 않습니까??

도움말 읽기 - https://www.mql5.com/en/docs/basis/types/classes :

구조에 string 유형의 변수 및/또는 동적 배열 객체가 포함된 경우 컴파일러는 이러한 구조에 대해 암시적 생성자를 할당합니다. 여기서 string 유형 구조 의 모든 구성원은 0으로 설정되고 올바른 초기화가 수행됩니다. 동적 배열 객체

...

생성자와 소멸자

생성자는 구조체 또는 클래스의 개체가 생성될 때 자동으로 호출되는 특수 함수이며 일반적으로 클래스 멤버를 초기화 하는 데 사용됩니다. 다음에서 우리는 클래스에 대해서만 이야기할 것이고, 달리 언급되지 않는 한 말한 모든 것은 구조에 적용됩니다. 생성자의 이름은 클래스의 이름과 일치해야 합니다. 생성자에는 반환 유형이 없습니다( void 유형을 지정할 수 있음).

클래스의 특정 멤버( 문자열 , 동적 배열 및 초기화가 필요한 객체)는 생성자의 존재 여부에 관계없이 어쨌든 초기화됩니다.

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 

주석 ... 글쎄, 적어도 나는 알 것이다.

구조에서도 NULL이 될까요?

 
TheXpert :

주석 ... 글쎄, 적어도 나는 알 것이다.

구조에서도 NULL이 될까요?

NULL과 비교하고 스스로 알아내십시오 - void 유형과 NULL 상수 :

미리 정의된 const 변수 NULL void 유형 입니다. 변환 없이 다른 기본 유형의 변수에 할당할 수 있습니다. 기본 유형의 변수를 NULL 값과 비교할 수도 있습니다.

예시:

//--- 문자열이 초기화되지 않은 경우 미리 정의된 값을 할당합니다.
if (some_string== NULL ) some_string= "비어 있음" ;

NULL또한 new 연산자 로 생성된 객체에 대한 포인터와 비교할 수 있습니다.

 
Rosh :

변수를 사용하려면 먼저 값을 할당 해야 합니다(명시적으로 초기화). 아니면 동의하지 않습니까?

명시적 초기화는 선언 시 즉시 초기화가 필요함을 의미하지 않습니다. 그러나 나중에 초기화되지 않은 변수의 값이 일부 계산에 사용되면 결과를 예측할 수 없습니다.

새에 대해 이야기합니다.

 //Struct StrMQL4_Deal
struct StrMQL4_Deal
{
//----------------------------------------------------------------------------//
double TP = 0 ;
double SL = 0 ;
//----------------------------------------------------------------------------//
};

그리고 컴파일러는 우리에게 무엇을 알려줄까요? 그리고 그는 다음과 같이 대답할 것입니다 - '=' - 불법 할당 사용

 //Class CMqlExpert
class CMqlExpert
//Purpose: Main class of trade system. 
{
//----------------------------------------------------------------------------//
protected :
//****************************************************************************//
//                    Protected declarations of the class                     //
//****************************************************************************//
bool TradeMonday    = true ; //Trade in monday
bool TradeTuesday   = true ; //Trade in tuesday
bool TradeWednesday = true ; //Trade in wednesday
bool TradeThursday  = true ; //Trade in thursday
bool TradeFriday    = true ; //Trade in friday
//----------------------------------------------------------------------------//
public :

컴파일러가 기울어지지 않았습니다 - '=' - 불법 할당 사용.

내 질문은 - 프로그래머(이 경우 나)가 변수가 사용되기 전에 초기화를 처리하지 않으면(컴파일러가 요구하는 대로 작동하고 생성자에서 이 순간이 누락됨) 어떻게 됩니까?


 
Interesting :

내 질문은 - 프로그래머(이 경우 나)가 변수가 사용되기 전에 초기화 를 처리하지 않으면(컴파일러가 요구하는 대로 작동하고 생성자에서 이 순간이 누락됨) 어떻게 됩니까?

질문은 초보자에게서...
 
sergeev :
질문은 초보자에게서...

뭐, 당시에는 그렇게 생각했지만(오래전이라 기억이 가물가물), 열정적으로 지원서를 작성하고 싶었다. :)

컴파일러 수준에서 변수를 즉시 초기화하는 것이 금지된 이유를 아직 이해하지 못합니다.