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?
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?
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.
gösterici üzerinde 6 bir değeriyle başlatılır işaret bellek adresi.
Operatör (,) ilk işleneni attığından, yeni int (6) ile aynıdır. Sağ? – Stringer
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. –
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
Derleyicim, g ++, bunu yapmaya çalışırken bir hata döndürür.
Bunu hangi derleyici veya kodla gördünüz?
Visual Studio 2008. Bu kodu yazdım. – Stringer
MSVC 6.0'da derler ve ptr değerini 6 ile başlatır. –
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);
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
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);
, 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
@GMan: Bunu bir cevap olarak eklemelisin, böylece onu destekleyebiliriz. – Zacky112