SORU
6 Mart 2010, CUMARTESİ


Haçlar başlatma belirtileri nelerdir?

Aşağıdaki kodu göz önünde bulundurun:

#include <iostream>
using namespace std;

int main()
{
    int x, y, i;
    cin >> x >> y >> i;
    switch(i) {
        case 1:
            // int r = x   y; -- OK
            int r = 1; // Failed to Compile
            cout << r;
            break;
        case 2:
            r = x - y;
            cout << r;
            break;
    };
}

G crosses initialization of 'int r'şikayet.Benim sorular şunlardır:

  1. crosses initialization nedir?
  2. Neden x y derleme,ama daha sonra pas ilk başlatıcı başarısız oldu?
  3. Sözde sorunları crosses initialization nedir?

EDİT:
Parantez r kapsamını belirlemek için kullanmam gerektiğini biliyorum ama,non-POD çok durumda tanımlanabilir neden örneğin anahtar deyim neden bilmek istiyorum.

Teşekkürler.

CEVAP
6 Mart 2010, CUMARTESİ


int r = x y; sürümü derleme ya da olmayacak.

Sorun r başlatıcısı idam edilmeden kapsam gelmek için mümkün olmasıdır. Kodu eğer başlatıcı tamamen (int r; okur hattı yani) kaldırdıysanız iyi derleme.

Yapabileceğiniz en iyi şey, değişken kapsamını sınırlamak için. Bu şekilde derleyici ve okuyucuyu hem tatmin olursun.

switch(i)
{
case 1:
    {
        int r = 1;
        cout << r;
    }
    break;
case 2:
    {
        int r = x - y;
        cout << r;
    }
    break;
};

Standart diyor (6.7/3):

Olası başlatma ile ilgili tanımlamalar atlar bir şekilde bir blok içine, ama değil transfer için. Bir program bu atlar bir noktada bir yerel değişken ile otomatik depolama süresi değildir kapsamına noktası nerede kapsam hasta biçimlendirilmiş sürece değişken vardır POD türü (3.9) ve ilan olmadan bir başlatıcı (8.5).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GWTLecturer

    GWTLecturer

    18 EKİM 2012
  • habpsu

    habpsu

    25 Temmuz 2007
  • jedimasterkyle

    jedimasterky

    11 ŞUBAT 2006