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

  • dougownsall

    dougownsall

    7 EKİM 2007
  • Helder Barreto

    Helder Barre

    22 Mayıs 2006
  • Mega64

    Mega64

    24 ŞUBAT 2006