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

  • fireflame65

    fireflame65

    27 Mart 2007
  • Fr. Eckle Studios

    Fr. Eckle St

    29 Kasım 2006
  • sWooZie

    sWooZie

    9 ŞUBAT 2006