aşağıdaki iki program çok daha iyi bir performansa sahip ikinci bir ile, farklı çıkışlara derlemek (gcc ve clang ile test):Otomatik xValue Biraz şaşırtıcı (bana) optimizasyon
#include <vector>
int main()
{
std::vector<int> a(2<<20);
for(std::size_t i = 0; i != 1000; ++i) {
std::vector<int> b(2<<20);
a = b;
}
}
vs
#include <vector>
int main()
{
std::vector<int> a(2<<20);
for(std::size_t i = 0; i != 1000; ++i) {
std::vector<int> b(2<<20);
a = std::move(b);
}
}
birisi derleyici yapar göre neden (veya can) otomatik b
son atamasında bir xValue düşünün ve açık std::move
döküm olmadan hareket semantiğini uygulanamıyor?
Düzenleme: (g++|clang++) -std=c++11 -O3 -o test test.cpp
Derleyicilere ilettiğiniz parametreler nelerdir? – Joe
İlk tahminim, programın anlambilimini bir kopyasını harekete geçirerek beklenmedik bir şekilde değiştireceğidir. – pmr
@pmr: Ben de öyle şüpheliyim, ama nedenini anlamak isterim. Naif olarak, bir xvalue'nun bana olması gerektiği gibi görünüyor. – Xoph