/Zc:nrvo (İsteğe bağlı NRVO'ları denetleme)

Derleyici seçeneği Standart /Zc:nrvo C++ isteğe bağlı adlandırılmış dönüş değeri iyileştirme (NRVO) kopyalama veya taşıma elision davranışını denetler.

Sözdizimi

/Zc:nrvo[-]

Açıklamalar

Visual Studio 2022 sürüm 17.4 ve sonraki sürümlerinde, derleyici seçeneğini kullanarak /Zc:nrvo isteğe bağlı kopyalama veya taşıma elision davranışını açıkça etkinleştirebilirsiniz. Bu seçenek varsayılan olarak kapalıdır, ancak seçeneği, /permissive- seçeneği veya /std:c++20 üzerini /O2 kullanarak derleme yaptığınızda otomatik olarak ayarlanır. altında /Zc:nrvo, kopyalama ve taşıma elisyonu mümkün olan her yerde gerçekleştirilir. İsteğe bağlı kopyalama veya taşıma elision seçeneği kullanılarak /Zc:nrvo- açıkça devre dışı bırakılabilir. Bu derleyici seçenekleri yalnızca isteğe bağlı kopyalama veya taşıma seçeneğini denetler. Zorunlu kopyalama veya taşıma iznamesi (C++ Standardı tarafından belirtilen) devre dışı bırakılamaz.

Zorunlu kopyalama ve taşıma elision

Döndürülen değer return deyiminin bir parçası olarak başlatıldığında C++ standardı kopyalama veya taşıma imasion gerektirir. Örneğin, bir işlev kullanarak return ExampleType();döndürülen döndürdüğünde ExampleType gereklidir. MSVC derleyicisi, altında /Zc:nrvo-bile gerektiğinde deyimler için return her zaman kopyalama ve taşıma elision işlemi gerçekleştirir.

İsteğe bağlı kopyalama ve taşıma elision

Bir return deyim ilkel olmayan türde bir ifade içerdiğinde, yürütmesi ifade sonucunu çağıran işlevin dönüş yuvasına kopyalar. Derleyici, döndürülen türün kopya veya taşıma oluşturucusunu çağırır. Ardından, işlevden çıkıldığında, işlev yerel değişkenleri için yıkıcılar çağrılır ve ifadede adlı tüm değişkenleri içerir.

C++ standardı, derleyicinin isteğe bağlı olarak döndürülen nesneyi doğrudan çağıran işlevin dönüş yuvasında oluşturmasına izin verir (ancak gerektirmez). Bu yapı, deyiminin bir parçası olarak yürütülen kopya veya taşıma oluşturucuyu return atlar (veya elides). Diğer iyileştirmelerin çoğundan farklı olarak, bu dönüşümün programın çıktısı üzerinde gözlemlenebilir bir etkiye sahip olması sağlanır. Yani, kopyalama veya taşıma oluşturucu ve ilişkili yıkıcı bir kez daha az çağrılır. Derleyici her durumda oluşturucuyu ilerletse bile standart, adlandırılmış döndürülen değişkenin tanımlı bir kopya veya taşıma oluşturucuya sahip olmasını gerektirir.

Visual Studio 2022 sürüm 17.4'ün önceki sürümlerinde, iyileştirmeler devre dışı bırakıldığında (örneğin, altında /Od veya işaretli #pragma optimize("", off)işlevlerde) derleyici yalnızca zorunlu kopyalama ve taşıma elisyonu gerçekleştirir. altında /O2, eski derleyiciler, bu koşulların tümü karşılandığında adlandırılmış bir değişkenin iyileştirilmiş bir işlevde döndürülmesi üzerine isteğe bağlı kopyalama veya taşıma elisyonu gerçekleştirir: döngüleri veya özel durum işlemesi yoktur, çakışan ömürleri olan birden çok simge döndürmez, türün kopya veya taşıma oluşturucusunun varsayılan bağımsız değişkenleri yoktur.

Visual Studio 2022 sürüm 17.4, derleyicinin üzerinde isteğe bağlı kopyalama veya taşıma imlerini /Zc:nrvoaçıkça etkinleştirilip etkinleştirilmediği veya , /permissive-veya /std:c++20 daha sonraki seçenekleri kullanarak /O2otomatik olarak yaptığı yer sayısını artırır. altında /Zc:nrvo, derleyici herhangi bir işlev için adlandırılmış değişkenin döndürülmesiyle isteğe bağlı kopyalama veya taşıma imtiyazı gerçekleştirir: döngüleri veya özel durum işlemesi olmadığında (daha önce olduğu gibi); bir döngüden değişken döndürür; özel durum işlemeye sahiptir; döndürülen türün kopyalama veya taşıma oluşturucusunun varsayılan bağımsız değişkenleri vardır. İsteğe bağlı kopyalama veya taşıma imleri hiçbir zaman uygulandığında /Zc:nrvo- veya işlev çakışan ömürleri olan birden çok simge döndürdüğünde ya da adlandırılmış bir değişkenin atlanması için yapılmaz.

altında /Zc:nrvozorunlu ve isteğe bağlı kopyalama imsion hakkında daha fazla bilgi ve örnekler için C++ Ekip Blogu'ndaki Kopyalama ve Taşıma elision'ını geliştirme bölümüne bakın.

Visual Studio'da bu derleyici seçeneğini ayarlamak için

  1. Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.

  2. Yapılandırma Özellikleri>C/C++>Komut Satırı özellik sayfasını seçin.

  3. Ek seçenekler'de veya /Zc:nrvo-ekleyin/Zc:nrvo. Değişikliklerinizi kaydetmek için Tamam'ı veya Uygula'yı seçin.

Ayrıca bkz.

/Zc (Uyumluluk)
/O2
/permissive-
/std (Dil standart sürümünü belirtin)