Hatalar, hatalar, sorular - sayfa 2860

 
Bu doğru derleyici davranışı mı?
 class A
{
public :
   static int i;
  
   static int f()
  {
    A::i = 123 ;
    
     return (A::i);
  }
};

static int A::i = A::f();

void OnStart ()
{
   Alert (A::i); // 123
}
Görünüşe göre A::i'ye erişildiği A::f() yöntemine yapılan çağrı sırasında A::i yaratılmamış.
 
fxsaber :
Bu doğru derleyici davranışı mı? Görünüşe göre A::i'ye erişilen A::f() yöntemine yapılan çağrı sırasında A::i yaratılmamış.

"Yaratılmış" kelimesinin anlamı nedir?

static, genel bir değişkeni veya işlevi gizlemek için bir komisyon oluşturmanın bir yoludur ve görünürlüğü işlevin veya sınıfın kapsamıyla sınırlar

Global değişkenin belleği her zaman mevcuttur.
Ve evet, başlatma sırası global değişkenler için çok önemlidir (yani, değişkene başlatılmadan önce erişmekten kaçınmak için)
Yukarıdaki örnekte, yuvarlandı ...

Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
После загрузки на исполнение mql5-программы каждой переменной выделяется память в соответствие с типом переменной. Переменные делятся на два типа по уровню доступа - глобальные переменные и локальные переменные, и по классам памяти: входные параметры mql5-программы, статические и автоматические. Каждая переменная при необходимости...
 
Ilyas :

Yukarıdaki örnekte, yuvarlandı ...

Buradaki derleyiciyi değiştirecek misiniz? Şahsen, her şeyin olduğu gibi kalmasını isterim.

 
fxsaber :

Buradaki derleyiciyi değiştirecek misiniz? Şahsen, her şeyin olduğu gibi kalmasını isterim.

Davranışlarımızı değiştirmeyi planlamıyoruz.

Ancak genel değişkenlere erişim hatalarını (başlatmadan önce) tespit etmek için ertelenmiş bir görev vardır.
Özelliği uygularsak, yukarıdaki kodu derlerken bir uyarı alırsınız: A::i'yi başlatmak için, A::i başlatılmış değişkenine erişilen A::f() işlevi kullanılır.

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
Ilyas :

Özelliği uygularsak, yukarıdaki kodu derlerken bir uyarı alırsınız: A::i'yi başlatmak için, A::i başlatılmış değişkenine erişilen A::f() işlevi kullanılır.

Teşekkür ederim!

 
Ilyas :

Davranışı değiştirmeyi planlamıyoruz

O zaman, bildirimin tamamlandığı andan itibaren bir değişkenin bildirilmiş olarak kabul edilmesi kendi konseptinizle çelişir. O zaman neden icat ettin? Bir durumda öyleyse ve diğerinde - farklı

 int i = i; // Error: 'i' - undeclared identifier
İyi bir dilin tek tip kuralları vardır, tersi değil
 
A100 :

O zaman, bildirimin tamamlandığı andan itibaren bir değişkenin bildirilmiş olarak kabul edilmesi kendi konseptinizle çelişir. O zaman neden icat ettin? Bir durumda öyleyse ve diğerinde - farklı

İyi bir dilin tek tip kuralları vardır, tersi değil

Aslında sıradan bir insanım ama böyle bir şey (int i = i) bir içkiyle bile aklıma gelmezdi ...... 8(

 
Сергей Таболин :

Aslında sıradan bir insanım ama böyle bir şey (int i = i) bir içkiyle bile aklıma gelmezdi ...... 8(

Ve orijinal örnekten temel fark nedir? Fazlalığı kaldırın ve şunları alın:

 int i = i = 123 ; // Error: 'i' - undeclared identifier

Sadece bir sürü satır var, ama burada sadece bir tane var

Derleme hatası yoksa, burada olmamalıdır (ve tam tersi), aksi takdirde bu bir karışıklıktır.

 
A100 :

O zaman, bildirimin tamamlandığı andan itibaren bir değişkenin bildirilmiş olarak kabul edilmesi kendi konseptinizle çelişir. O zaman neden icat ettin? Bir durumda ve diğerinde - farklıysa

İyi bir dilin tek tip kuralları vardır, tersi değil
Bu durumda, her şey yolunda.

Diğer, daha zor koşullarda, tanımsız davranışlarda neler elde edebileceğinizle ilgili. C++'da tatar yayları gerçekleştirilebilir.
 
A100 :

Ve orijinal örnekten temel fark nedir? Fazlalığı kaldırın ve şunları alın:

Sadece bir sürü satır var, ama burada sadece bir tane var

Derleme hatası yoksa, burada olmamalıdır (ve tam tersi), aksi takdirde bu bir karışıklıktır.

Yanılıyorsun, aynı değiller.

Bir sınıftaki statik değişkenin bildirimi, onun ön bildirimidir (bir işlevin veya sınıfın ön bildirimine benzer), ancak aslında yerleştirme, derleyiciye yalnızca değişkenin bellekte nerede saklanacağını ve ne zaman saklanacağını söyler. başlatılmalı