Yani C++ kod biraz: GCC 4.8
ve VS 2013
ile iyi derlerGCC 4.8 std :: string yapıcısı için kötü kod üretir?
void func(const std::string& theString)
{
std::string theString(theString);
theString += " more string";
std::cout << theString;
}
. C++ bilgimden kod, theString
yerel değişkeni ile tamamlandı ve kapsam, theString
işlev argümanından gizleniyor. theString
yapısında, yalnızca theString
kapsamı, std::string
yapıcısına iletilen işlev argümanıdır. Oluşturulan std::string
daha sonra kapsam içine giren ve daha sonra kodda kullanılan theString
olan theString
olarak adlandırılmıştır. Uf!
Ancak GCC
std::string
yapıcıya iletilen theString
gibi hareket gibi görünüyor (henüz inşa edilmemiştir) yerel theString
çökmesine derlenmiş programı neden oluyor. VS 2013 ile kod derler ve çalışır.
Yani,
- benim kod doğru mu? Yoksa spesifik olmayan bir şey yapıyorum, yani GCC davranışı tanımsızdır.
- Bu GCC'de bir hata mı?
En azından kodunuz berbat. Bu şekilde asla kodlanmamalısınız, çünkü okunamaz (insanlar için). –
1. No. 2. Hayır. Bir dizeyi (başlatılmamış) kendisiyle başlatıyorsunuz. – juanchopanza
Böylelikle, eğer varsa VS2013 içinde hata daha olasıdır. Ama kodun yanlış. –