6

Bugün, C++ 'da bu kodu yazabileceğinizi ve derlediğini öğrendim:Bu dinamik ayırma ne yapar?

int* ptr = new int(5, 6); 

Bunun amacı nedir? Elbette dinamik new int(5) olayını biliyorum, ama burada kayboldum. Herhangi bir ipucu?

+4

, bu durumda bunu yapmanın doğru yolu 'int * ptr = new int ((5, 6));'. int (5,6) 'bir hatayla sonuçlanır, ancak parantez içine yerleştirmek onu 6'ya dönüştürür, sonra bunu kullanır. Dedi ki, çirkin. :) – GManNickG

+0

@GMan: Bunu bir cevap olarak eklemelisin, böylece onu destekleyebiliriz. – Zacky112

cevap

13

Virgül operatörünü kullanıyorsunuz, yalnızca bir değer (en sağdaki) olarak değerlendiriyor.

virgül operatörü (,) sadece bir sentezleme beklenen burada dahil olduğu iki ayrı ya da daha fazla ifadeleri için kullanılır. ifadeleri kümesi değeri için değerlendirildiğinde, yalnızca en sağdaki ifade kabul edilir.

Source

gösterici üzerinde 6 bir değeriyle başlatılır işaret bellek adresi.

+0

Operatör (,) ilk işleneni attığından, yeni int (6) ile aynıdır. Sağ? – Stringer

+3

Evet, doğru. Ama değerlendirmek istediğiniz 5 yerine başka bir ifadeniz olabilir ve 6 geri döndü. Tüm ifadeleri değerlendirecek, ancak sonuncuyu döndürecektir. –

+1

http://msdn.microsoft.com/en-us/library/zs06xbxh(VS.80).aspx Ancak bu bağlantıda Microsoft diyor ki: "Virgül normalde ayırıcı olarak kullanılıyorsa (örneğin, işlevler için gerçek argümanlar veya toplayıcı başlatıcılar), virgül operatörü ve işlenenleri parantez içine alınmalıdır. " Int (expression) ifadesi argüman listesi olarak sayılmaz ve bu nedenle virgül ayraç olarak değerlendirilmez mi? – Bob

1

Derleyicim, g ++, bunu yapmaya çalışırken bir hata döndürür.

Bunu hangi derleyici veya kodla gördünüz?

+0

Visual Studio 2008. Bu kodu yazdım. – Stringer

+0

MSVC 6.0'da derler ve ptr değerini 6 ile başlatır. –

1

Bir çeşit 2D dizi ayırmak anlamına gelen bir hata olduğuna inanıyorum. Bunu ancak C++ içinde yapamazsınız. Parçacık aslında derler, çünkü son ifadeyi döndüren ve diğerlerinin sonuçlarını yok sayan virgül operatörünü kullanır. 5

int* ptr = new int(6); 
1

göz ardı edilir: Bu ifade eşdeğerdir anlamına gelir. Bu, yığına bir int ayırır ve bunu (5,6) olarak başlatır. virgül kadarıyla

int* ptr = new int(6); 

: Sadece bunu

virgül operatörü tarafından ayrılmış ifadelerden bir dizi sonucu son ifadenin değeridir, yani int 6

1

için başlatılır operatör söz konusu olduğunda, istediğiniz görevi onsuz yapamadığınızda kullanın. gibi uygulayarak hileler hiçbir faydası yoktur: Ne olursa olsun için

int* ptr = new int(5, 6);