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

  • spyib

    spyib

    9 Ocak 2007
  • TechRax

    TechRax

    21 EYLÜL 2009
  • TWiT Netcast Network

    TWiT Netcast

    27 EKİM 2005