tr-demoscene

the scene => coding => pc => Konuyu başlatan: anesthetic - 19.07.2006 20:44:42

Başlık: built-in olmayan temporaryler [cpp]
Gönderen: anesthetic - 19.07.2006 20:44:42
Bir soru daha..

Derleyici (msvc) built-in temporaryleri const olarak oluşturuyor. "int() = 3 ;"
gibi şeyler yazamıyorum (not an l-value). ıyi güzel hoş ama built-in olmayan, kendi oluşturduğum bi tipte bunu yapmıyor. "complex() = complex() ;" filan diyebiliyorum. Hatta "complex const() = complex() ;" de diyebiliyorum.

Çözüm için operator='in bi normal bi const versiyonunu yaptım. ılkini public, ikincisini private yaptığım zaman istediğim gibi çalışıyor. Bu durumda operator='e ihtiyaç duymasam bile (memberwise copy varken) =, +=, -=, *= vs bissürü member oluşturmam gerekiyor (ikişer tane). Kısaca çalışıyor ama şık değil.

Gerçi temporary'nin değiştirilmesi çok büyük bi sorun değil ama öyle bırakınca da bi şeyler eksik gibi hissediyorum.

Not: Sanmıyorum ama compiler hatası da olabilir bu. Çünkü şöyle bi şey kullandığımda çöküyor derleyici.
class A { public: A(int) {} ; } const(0) = 0 ;

Bu arada C++'ı tüm forumla birlikte öğreniyorum umarım kızmıyorsunuzdur :D
Başlık: built-in olmayan temporaryler [cpp]
Gönderen: anesthetic - 19.07.2006 20:48:48
Hmm. "complex() = complex() ;" diyebiliyorsam "complex const() = complex() ;" zaten derim, constant initialization yapıyor.

Mesele en başta temporaryleri değiştirebilmem.
Başlık: built-in olmayan temporaryler [cpp]
Gönderen: nightlord - 19.07.2006 21:21:22
Alıntı
Originally posted by anesthetic@Jul 19 2006, 07:48 PM
Hmm. "complex() = complex() ;" diyebiliyorsam "complex const() = complex() ;" zaten derim, constant initialization yapıyor.

Mesele en başta temporaryleri değiştirebilmem.
[post=8195]Quoted post[/post]
[/b]

complex() = complex() dediginde de initialization yapiyorsun
Başlık: built-in olmayan temporaryler [cpp]
Gönderen: anesthetic - 19.07.2006 21:32:34
int() = int() diyemiyorum ama. aynı korumayı nasıl sağlarım tanımladığım tiplerde.
Başlık: built-in olmayan temporaryler [cpp]
Gönderen: anesthetic - 21.07.2006 11:11:58
Hmm cevabımı sonunda bi kitapta buldum. int() = int() diyemememin sebebi built in tiplerdeki constların aslında compile esnasında obje olmaktan çıkması. Runtime'da construct edilen bi şey olmak yerine binary içinde yer alan datalar olmaları. Ben bunu temporaryler için bi çeşit koruma zannediyordum.
Başlık: built-in olmayan temporaryler [cpp]
Gönderen: nightlord - 25.07.2006 07:58:34
hmm ben de neden temporaryler icin boyle bir koruma ihtiyaci oldugunu merak etmistim. sonucta bu aletler gecici olarak islem sonuclarini tutmaya yarayan (fonksiyondan donme vs) zimbirtilar ve tek kullanimliklar ve tasarim acisindan neden l-value olmadiklarini anlamamistim

gcc maillistte soyle biseye rastladim. gcc develeoperlari bu hata mesajini tartismis. birisi, hata mesajinin yanlis yonlendirici oldugunu "not an l-value for built in assignment operator" falan gibi bi hale gelmesi gerektigini soylemis.