Bagikan melalui


Yang baru untuk C++ di Visual Studio 2019

Visual Studio 2019 menghadirkan banyak pembaruan dan perbaikan untuk lingkungan Microsoft C++. Kami telah memperbaiki banyak bug dan masalah di pengompilasi dan alat. Banyak dari masalah ini dikirimkan oleh pelanggan melalui opsi Laporkan Masalah dan Berikan Saran di bawah Kirim Umpan Balik. Terima kasih telah melaporkan bug!

Untuk informasi selengkapnya tentang apa yang baru di semua Visual Studio, kunjungi Apa yang baru di Visual Studio 2019. Untuk informasi tentang apa yang baru untuk C++ di Visual Studio 2017, lihat Apa yang baru untuk C++ di Visual Studio 2017. Untuk informasi yang baru untuk C++ di Visual Studio 2015 dan versi yang lebih lama, lihat Visual C++ Yang Baru pada 2003 hingga 2015. Untuk informasi selengkapnya, lihat dokumen Microsoft C++: Apa yang baru.

Apa yang baru untuk C++ di Visual Studio versi 16.11

Untuk ringkasan fitur baru dan perbaikan bug di Visual Studio versi 16.11, lihat Apa yang Baru di Visual Studio 2019 versi 16.11.

  • Pengompilasi sekarang mendukung mode pengompilasi/std:c++20. Sebelumnya, fitur C++20 hanya tersedia dalam mode /std:c++latest di Visual Studio 2019. Fitur yang awalnya memerlukan mode /std:c++latest sekarang berfungsi dalam mode /std:c++20 atau yang lebih baru di versi terbaru Visual Studio.

  • Alat LLVM yang dikirim dengan Visual Studio telah ditingkatkan ke LLVM 12. Untuk detailnya, lihat catatan rilis LLVM.

  • Dukungan Clang-cl diperbarui ke LLVM 12.

Apa yang baru untuk C++ di Visual Studio versi 16.10

Untuk ringkasan fitur baru dan perbaikan bug di Visual Studio versi 16.10, lihat Apa yang Baru di Visual Studio 2019 versi 16.10.

  • Semua fitur C++20 sekarang tersedia di bawah /std:c++latest. Meskipun implementasi MSVC dari standar C++20 (seperti yang saat ini diterbitkan oleh ISO) selesai, beberapa fitur pustaka C++20 utama diharapkan dapat diubah oleh Laporan Cacat yang akan datang (perbaikan bug ISO C++20) yang dapat mengubahnya dengan cara yang tidak kompatibel dengan ABI. Lihat Masalah Microsoft/STL #1814 untuk detail selengkapnya.

    • Fungsi langsung C++20 & dukungan kontinit ditambahkan dalam 16.10
    • Bagian <chrono> terakhir : jam baru, detik lompatan, zona waktu, dan penguraian
    • Implementasi <format> untuk pemformatan teks
  • /openmp:llvm sekarang tersedia di x86 dan ARM64, selain x64

  • Sertakan direktori sekarang dapat ditetapkan sebagai eksternal dengan tingkat peringatan kompilasi yang dapat dikustomisasi dan pengaturan analisis kode.

  • Menambahkan opsi /await:strict untuk mengaktifkan coroutine gaya C++20 dalam mode bahasa sebelumnya.

  • Visualisasi std::coroutine_handle<T> debugger sekarang menampilkan nama fungsi coroutine asli dan tanda tangan serta titik penangguhan saat ini.

  • Dukungan tambahan untuk CMakePresets.

  • Anda sekarang diharuskan untuk menerima atau menolak sidik jari kunci host yang disajikan oleh server saat menambahkan koneksi jarak jauh baru di Visual Studio.

  • Pengalih /external ditambahkan ke MSVC untuk menentukan header yang harus diperlakukan sebagai eksternal untuk tujuan peringatan.

Apa yang baru untuk C++ di Visual Studio versi 16.9

Untuk ringkasan fitur baru dan perbaikan bug di Visual Studio versi 16.9, lihat Apa yang Baru di Visual Studio 2019 versi 16.9.

  • Sanitizer Alamat:

    • Dukungan sanitizer alamat kami di Windows berada di luar mode eksperimental dan telah mencapai ketersediaan umum.

    • Dukungan RtlAllocateHeap yang diperluas, memperbaiki masalah kompatibilitas dengan pencegat RtlCreateHeap dan RtlAllocateHeap saat membuat kumpulan memori yang dapat dieksekusi.

    • Dukungan tambahan untuk rangkaian lama GlobalAlloc dan LocalAlloc fungsi memori. Anda dapat mengaktifkan pencegat ini dengan mengatur bendera lingkungan ASAN_OPTIONS=windows_hook_legacy_allocators=true.

    • Memperbarui pesan kesalahan untuk interleaving memori bayangan dan kegagalan intersepsi untuk menjadikan masalah dan resolusi eksplisit.

    • Integrasi IDE sekarang dapat menangani kumpulan lengkap pengecualian yang dapat dilaporkan ASan.

    • Pengompilasi dan linker akan menyarankan untuk memancarkan informasi debug jika mereka mendeteksi bahwa Anda membangun dengan ASan tetapi tidak memancarkan informasi debug.

  • Anda sekarang dapat menargetkan versi LLVM dari runtime OpenMP dengan pengalih CL /openmp:llvm baru. Ini menambahkan dukungan untuk klausul lastprivate pada bagian #pragma omp dan variabel indeks yang tidak ditandatangani dalam perulangan paralel for. Pengalih /openmp:llvm saat ini hanya tersedia untuk target amd64 dan masih bersifat eksperimental.

  • Proyek Visual Studio CMake sekarang memiliki dukungan kelas satu untuk pengembangan Windows jarak jauh. Ini termasuk mengonfigurasi proyek CMake untuk menargetkan Windows ARM64, menyebarkan proyek ke komputer Windows jarak jauh, dan melakukan penelusuran kesalahan proyek pada komputer Windows jarak jauh dari Visual Studio.

  • Versi Ninja yang dikirim dengan Visual Studio di Windows telah diperbarui ke versi 1.10. Untuk informasi selengkapnya tentang apa yang disertakan, lihat Catatan rilis Ninja 1.10.

  • Versi CMake yang dikirim dengan Visual Studio telah diperbarui ke versi 3.19. Untuk informasi selengkapnya tentang apa yang disertakan, lihat Catatan rilis Ninja 3.19.

  • Menandai banyak jenis kunci/penjaga di STL sebagai nodiscard.

  • IntelliSense:

  • MSVC sekarang menentukan runtime sanitizer alamat yang benar yang diperlukan untuk biner Anda. Proyek Visual Studio Anda akan secara otomatis mendapatkan perubahan baru. Saat menggunakan sanitizer alamat pada baris perintah, Anda sekarang hanya perlu meneruskan /fsanitize=address ke pengompilasi.

  • Pengelola Koneksi Visual Studio sekarang mendukung kunci privat menggunakan algoritma kunci publik ECDSA.

  • Memperbarui versi LLVM dan Clang yang dikirim pada alat penginstal kami ke v11. Baca catatan rilis untuk LLVM dan Clang untuk informasi selengkapnya.

  • Visual Studio sekarang akan menggunakan variabel CMake dari file toolchain untuk mengonfigurasi IntelliSense. Ini akan memberikan pengalaman yang lebih baik untuk pengembangan tertanam dan Android.

  • Implementasi Lebih Banyak proposal Kontainer Constexpr, yang memungkinkan destruktor dan ekspresi baru menjadi constexpr. Ini membuka jalan untuk utilitas seperti constexpr std::vector dan std::string.

  • Dukungan yang diperluas untuk modul C++20 IntelliSense, termasuk Definisi Buka, Modul Buka, dan penyelesaian anggota.

  • Templat fungsi yang disingkat sekarang didukung di pengompilasi MSVC.

Apa yang baru untuk C++ di Visual Studio versi 16.8

Untuk ringkasan fitur baru dan perbaikan bug di Visual Studio versi 16.8, lihat Apa yang Baru di Visual Studio 2019 versi 16.8.

  • C++20 Coroutines sekarang didukung di bawah /std:c++latest (atau /std:c++20 dimulai di Visual Studio 2019 versi 16.11) dan header <coroutine>.

  • IntelliSense sekarang menyediakan dukungan untuk C++20 header <concepts> dan <ranges>, serta penggantian nama dan penjelajahan untuk definisi konsep.

  • STL kami sekarang memiliki dukungan untuk sebagian besar Rentang C++20.

  • Fungsi anggota khusus yang trivial secara kondisional sekarang didukung di MSVC.

  • C11 dan C17 sekarang didukung di bawah pengalih /std:c11 dan /std:c17.

  • Peningkatan STL tambahan mencakup dukungan penuh untuk std::atomic_ref, , std::midpoint, dan std::lerp dan std::execution::unseq, pengoptimalan untuk std::reverse_copy, dan banyak lagi.

  • Versi CMake yang ditingkatkan dikirim dengan Visual Studio ke CMake 3.18.

  • Alat analisis kode kami sekarang mendukung standar SARIF 2.1: format log analisis statis standar industri.

  • Alat build yang hilang di proyek Linux sekarang akan mengeluarkan peringatan di toolbar dan deskripsi yang jelas tentang alat yang hilang dalam daftar kesalahan.

  • Anda sekarang dapat melakukan penelusuran kesalahan dump inti Linux pada sistem Linux jarak jauh atau WSL langsung dari Visual Studio.

  • Untuk pembuatan komentar C++ Doxygen, kami menambahkan opsi gaya komentar tambahan (/*! dan //!).

  • Pengumuman vcpkg tambahan.

  • Dukungan pengompilasi untuk lambda dalam konteks yang tidak dievaluasi.

  • Performa tautan /DEBUG:FULL ditingkatkan dengan pembuatan PDB multi-utas. Beberapa aplikasi besar dan game AAA melihat antara 2 hingga 4 kali penautan yang lebih cepat.

  • Debugger Visual Studio sekarang memiliki dukungan untuk char8_t.

  • Dukungan untuk proyek ARM64 menggunakan clang-cl.

  • Dukungan Intrinsik Intel AMX.

Apa yang baru untuk C++ di Visual Studio versi 16.7

Untuk ringkasan fitur baru dan perbaikan bug di Visual Studio versi 16.7, lihat Apa yang Baru di Visual Studio 2019 versi 16.7.

  • Dukungan C++ jarak jauh kami sekarang mendukung rentang distro dan shell Linux yang lebih luas, termasuk sh, csh, bash, tsch, ksh, zsh, dan dash. Anda dapat mengganti pilihan shell untuk koneksi jarak jauh dengan memodifikasi properti "shell" baru melalui ConnectionManager.exe. Dukungan ini telah diuji dengan proyek Linux berbasis MSBuild dan proyek CMake yang menargetkan sistem Linux jarak jauh atau WSL.

  • Anda sekarang dapat menggunakan Ninja (sistem build yang mengevaluasi build inkremental dengan sangat cepat) untuk meningkatkan waktu build bertambah bertahap untuk proyek Linux berbasis MSBuild. Anda dapat memilih fitur ini dengan mengatur "Aktifkan Build Bertambah Bertahap" ke "Dengan Ninja" di Halaman Properti Umum. Ninja (ninja-build) harus diinstal pada sistem Linux jarak jauh atau WSL Anda.

  • Fitur Pustaka Standar C++20 baru telah diterapkan. Silakan merujuk ke STL Changelog di GitHub untuk daftar terperinci.

  • Sekarang Anda dapat mengedit dan mengatur koneksi SSH jarak jauh default di Pengelola Koneksi. Ini berarti Anda dapat mengedit koneksi jarak jauh yang ada (misalnya, jika alamat IP-nya berubah) dan mengatur koneksi default yang akan digunakan di CMakeSettings.json dan launch.vs.json. Koneksi SSH jarak jauh memungkinkan Anda untuk membangun dan melakukan penelusuran kesalahan proyek C++ pada sistem Linux jarak jauh secara langsung dari Visual Studio.

  • Peningkatan dukungan IntelliSense untuk Clang pada Windows (clang-cl) di Visual Studio. Clang yang mencakup jalur sekarang mencakup pustaka clang, kami telah meningkatkan tampilan berlekuk dalam editor saat menggunakan pustaka std, dan kami telah menambahkan dukungan untuk C++2a dalam mode clang.

  • Sekarang Anda dapat mencoba menggarisbawahi kesalahan kode dan melihat perbaikan cepat yang lebih disarankan dalam proyek C++. Aktifkan fitur ini di bagian Alat > Opsi > Editor Teks > C/C++ > Eksperimental. Atur Nonaktifkan Linter Kode Eksperimental ke false. Pelajari selengkapnya di Blog Tim C++.

  • Kami telah menambahkan empat aturan analisis kode baru untuk menggabungkan fitur keamanan tambahan ke dalam C++: C26817, C26818, C26819, dan C26820.

  • Kami telah menambahkan dukungan kelas satu untuk melakukan penelusuran kesalahan proyek CMake pada sistem jarak jauh dengan gdbserver.

  • Temukan kesalahan kerusakan memori dengan mudah menggunakan implementasi eksperimental AddressSanitizer untuk C++ di Visual Studio, sekarang tersedia untuk proyek asli x64. Kami juga sekarang mendukung penggunaan runtime debug (/MTd, /MDd, /LDd).

  • IntelliSense sekarang memiliki dukungan dasar untuk Konsep, inisialisasi yang ditunjuk, dan beberapa fitur C++20 lainnya.

  • File .ixxdan .cppm sekarang dikenali sebagai C++ dan diperlakukan seperti itu oleh penyorot sintaks dan IntelliSense.

Apa yang baru untuk C++ di Visual Studio versi 16.6

Untuk ringkasan fitur baru dan perbaikan bug di Visual Studio versi 16.6, lihat Apa yang Baru di Visual Studio 2019 versi 16.6.

  • Pembuatan komentar Doxygen/XML yang disempurnakan: Secara otomatis menghasilkan stub komentar dokumen Doxygen atau XML dengan mengetik /// atau /** di atas fungsi. Ini sekarang ditampilkan di tooltip Info Cepat juga.

  • Dukungan Ninja untuk CMake untuk Linux/WSL: Gunakan Ninja sebagai generator dasar saat membangun proyek CMake di WSL atau sistem jarak jauh. Ninja sekarang menjadi generator default saat menambahkan konfigurasi Linux atau WSL baru.

  • Templat debug untuk men-debug CMake jarak jauh: Kami telah menyederhanakan templat untuk men-debug proyek CMake pada sistem Linux jarak jauh atau WSL dengan gdb.

  • Dukungan awal untuk konsep C++20: IntelliSense sekarang mengenali konsep C++20 dan menyarankannya dalam daftar anggota.

Apa yang baru untuk C++ di Visual Studio versi 16.5

Untuk ringkasan fitur baru dan perbaikan bug di Visual Studio versi 16.5, lihat Apa yang Baru di Visual Studio 2019 versi 16.5.

  • Dukungan model Penyelesaian Tim IntelliCode dan variabel anggota: Pengembang C++ sekarang dapat melatih model IntelliCode pada basis kode mereka sendiri. Kami menyebutnya model Penyelesaian Tim karena Anda mendapat manfaat dari praktik tim Anda. Selain itu, kami telah meningkatkan saran IntelliCode untuk variabel anggota.

  • Peningkatan IntelliSense:

    • IntelliSense sekarang menampilkan nama jenis yang lebih mudah dibaca saat berhadapan dengan Pustaka Standar.
    • Kami telah menambahkan kemampuan untuk mengalihkan fungsi Enter, Spasi, dan Tab sebagai karakter penerapan, dan untuk mengalihkan ketika Tab digunakan untuk Menyisipkan Cuplikan. Temukan pengaturan ini di bagian Alat > Opsi > Editor Teks > C/C++ > Tingkat Lanjut > IntelliSense.
  • Pengelola Koneksi melalui baris perintah: Anda sekarang dapat berinteraksi dengan koneksi jarak jauh yang disimpan melalui baris perintah. Ini berguna untuk tugas-tugas seperti menyediakan mesin pengembangan baru atau menyiapkan Visual Studio dalam integrasi berkelanjutan.

  • Debug dan sebarkan untuk WSL: Gunakan dukungan asli Visual Studio untuk WSL untuk memisahkan sistem build Anda dari sistem penyebaran jarak jauh Anda. Sekarang Anda dapat membangun secara asli di WSL dan menyebarkan artefak build ke sistem jarak jauh kedua untuk melakukan penelusuran kesalahan. Alur kerja ini didukung oleh proyek CMake dan proyek Linux berbasis MSBuild.

  • Dukungan untuk mode kepatuhan FIPS 140-2: Visual Studio sekarang mendukung mode kepatuhan FIPS 140-2 saat mengembangkan aplikasi C++ yang menargetkan sistem Linux jarak jauh.

  • Layanan bahasa untuk file CMake Language dan manipulasi proyek CMake yang lebih baik:

    • Salinan file sumber untuk proyek CMake yang menargetkan sistem Linux jarak jauh telah dioptimalkan. Visual Studio sekarang menyimpan "file sidik jari" dari kumpulan sumber terakhir yang disalin dari jarak jauh dan mengoptimalkan perilaku berdasarkan jumlah file yang telah berubah.

    • Fitur navigasi kode seperti Definisi Buka dan Temukan Semua Referensi sekarang didukung untuk fungsi, variabel, dan target dalam file skrip CMake.

    • Tambahkan, hapus, dan ganti nama file sumber dan target dalam proyek CMake Anda dari IDE tanpa mengedit skrip CMake Anda secara manual. Saat Anda menambahkan atau menghapus file dengan Penjelajah Solusi, Visual Studio akan secara otomatis mengedit proyek CMake Anda. Anda juga dapat menambahkan, menghapus, dan mengganti nama target proyek dari Tampilan Target Penjelajah Solusi.

  • Peningkatan proyek Linux: Proyek Linux Visual Studio sekarang memiliki IntelliSense yang lebih akurat dan memungkinkan Anda mengontrol sinkronisasi header jarak jauh berdasarkan proyek demi proyek.

Apa yang baru untuk C++ di Visual Studio versi 16.4

Untuk ringkasan fitur baru dan perbaikan bug di Visual Studio versi 16.4, lihat Apa yang Baru di Visual Studio 2019 versi 16.4.

  • Analisis Kode sekarang secara native mendukung Clang-Tidy proyek MSBuild dan CMake, baik Anda menggunakan toolset Clang atau MSVC. Pemeriksaan clang-tidy dapat berjalan sebagai bagian dari analisis kode latar belakang, muncul sebagai peringatan dalam editor (berlekuk), dan ditampilkan di Daftar Kesalahan.

  • Proyek CMake Visual Studio sekarang memiliki Halaman Gambaran Umum untuk membantu Anda memulai pengembangan lintas platform. Halaman-halaman ini bersifat dinamis dan membantu Anda terhubung ke sistem Linux dan menambahkan konfigurasi Linux atau WSL ke proyek CMake Anda.

  • Menu menurun peluncuran untuk proyek CMake sekarang menampilkan target Anda yang terakhir digunakan dan dapat difilter.

  • C++/CLI sekarang mendukung interop dengan .NET Core 3.1 dan yang lebih tinggi di Windows.

  • Anda sekarang dapat mengaktifkan ASan untuk proyek yang dikompilasi dengan MSVC pada Windows untuk instrumentasi runtime kode C++ yang membantu mendeteksi kesalahan memori.

  • Pembaruan Pustaka Standar C++ MSVC:

    • C++17: Menerapkan presisi umum to_chars(), menyelesaikan Konversi String Dasar P0067R5 (charconv). Ini melengkapi implementasi semua fitur pustaka di Standar C++17.
    • C++20: Menerapkan konsep Ganti Nama P1754R1 menjadi standard_case. Untuk menyertakan fitur-fitur ini, gunakan opsi pengompilasi /std:c++latest (atau /std:c++20 mulai dari Visual Studio 2019 versi 16.11). Opsi ini juga dapat diatur di halaman properti proyek Properti Konfigurasi > C/C++ > Bahasa menggunakan properti Standar Bahasa C++.
  • Koleksi alat baru bernama C++ Build Insights sekarang tersedia. Untuk informasi selengkapnya tentang pengumuman, lihat Blog Tim C++.

Apa yang baru untuk C++ di Visual Studio versi 16.3

Untuk ringkasan fitur baru dan perbaikan bug di Visual Studio versi 16.3, lihat Apa yang Baru di Visual Studio 2019 versi 16.3.

  • Pengembang C++ sekarang dapat mengalihkan komentar baris menggunakan pintasan keyboard Ctrl+K, Ctrl+/.

  • IntelliSense daftar anggota sekarang difilter berdasarkan pengualifikasi jenis, misalnya, const std::vector sekarang memfilter metode seperti push_back.

  • Kami menambahkan fitur Pustaka Standar C++20 ini (tersedia di /std:c++latest, atau /std:c++20 mulai dari Visual Studio 2019 versi 16.11):

    • P0487R1: Memperbaiki operator>>(basic_istream&, CharT*)
    • P0616R0: Menggunakan move() Di <numeric>
    • P0758R1: is_nothrow_convertible
    • P0734R0: Ekstensi C++ untuk Konsep
    • P0898R3: Konsep Pustaka Standar
    • P0919R3: Pencarian Heterogen Untuk Kontainer Yang Tidak Diurutkan
  • Pemeriksaan Pedoman Inti C++ baru, termasuk seperangkat aturan "Aturan Enum" baru, dan tambahan const, enum dan jenis aturan.

  • Skema pewarnaan semantik default baru memungkinkan pengguna untuk lebih memahami kode secara sekilas, jendela tumpukan panggilan dapat dikonfigurasi untuk menyembunyikan argumen templat, dan C++ IntelliCode aktif secara default.

  • Konfigurasikan target debug dan tugas kustom dengan variabel lingkungan menggunakan CMakeSettings.json atau CppProperties.json atau tag "env" baru pada target dan tugas individual di launch.vs.json dan tasks.vs.json.

  • Sekarang pengguna dapat menggunakan tindakan cepat pada paket vcpkg yang hilang untuk secara otomatis membuka konsol dan menginstal ke penginstalan vcpkg default.

  • Salinan header jarak jauh yang dilakukan oleh proyek Linux (CMake dan MSBuild) telah dioptimalkan dan sekarang berjalan secara paralel.

  • Dukungan asli Visual Studio untuk WSL sekarang mendukung build paralel untuk proyek Linux berbasis MSBuild.

  • Sekarang pengguna dapat menentukan daftar output build lokal untuk disebarkan ke sistem jarak jauh dengan proyek Linux Makefile.

  • Deskripsi pengaturan di Editor Pengaturan CMake sekarang berisi lebih banyak konteks dan tautan ke dokumentasi yang bermanfaat.

  • Model dasar C++ untuk IntelliCode sekarang diaktifkan secara default. Anda dapat mengubah pengaturan ini dengan membuka Alat>Opsi>IntelliCode.

Apa yang baru untuk C++ di Visual Studio versi 16.2

Untuk ringkasan fitur baru dan perbaikan bug di Visual Studio versi 16.2, lihat Apa yang Baru di Visual Studio 2019 versi 16.2.

  • Untuk proyek CMake lokal yang dikonfigurasi dengan Clang, Analisis Kode yang sekarang menjalankan pemeriksaan clang-tidy, muncul sebagai bagian dari analisis kode latar belakang sebagai peringatan dalam editor (berlekuk) dan di Daftar Kesalahan.

  • Memperbarui header <charconv> untuk konversi string Dasar P0067R5 C++17:

    • Menambahkan kelebihan beban floating-point to_chars() untuk presisi chars_format::fixed dan chars_format::scientific (chars_format::general precision adalah satu-satunya bagian yang belum diimplementasikan)
    • Mengoptimalkan chars_format::fixed terpendek
  • Menambahkan fitur Pustaka Standar C++20 ini:

    • Tersedia di bawah /std:c++latest (atau /std:c++20 dimulai di Visual Studio 2019 versi 16.11):
      • P0020R6: atomic<floating-point>
      • P0463R1: enumerasi endian
      • P0482R6: jenis char8_t untuk karakter dan string UTF-8
      • P0653R2: to_address() untuk mengonversi penunjuk ke penunjuk mentah
    • Tersedia di bawah /std:c++17 dan /std:c++latest (atau /std:c++20 dimulai di Visual Studio 2019 versi 16.11):
      • P0600R1: [[nodiscard]] di pustaka
    • Tersedia tanpa syarat:
      • P0754R2: header <version>
      • P0771R1: konstruktor pemindahan std::function seharusnya noexcept
  • Windows SDK tidak lagi menjadi dependensi untuk komponen CMake for Windows dan CMake for Linux.

  • Peningkatan pada linker C++ untuk secara signifikan meningkatkan waktu build iterasi untuk input terbesar. Waktu /DEBUG:FAST dan /INCREMENTAL rata-rata dua kali lebih cepat, dan /DEBUG:FULL sekarang tiga hingga enam kali lebih cepat.

Apa yang baru untuk C++ di Visual Studio versi 16.1

Untuk ringkasan fitur baru dan perbaikan bug di Visual Studio versi 16.1, lihat Apa yang Baru di Visual Studio 2019 versi 16.1.

Pengompilasi C++

  • Fitur C++20 ini telah diimplementasikan di pengompilasi C++, tersedia di bagian /std:c++latest (atau /std:c++20 dimulai pada Visual Studio 2019 versi 16.11):

    • Peningkatan kemampuan untuk menemukan templat fungsi melalui pencarian dependen argumen untuk ekspresi panggilan fungsi dengan argumen templat eksplisit (P0846R0).
    • Inisialisasi (P0329R4) yang ditentukan, yang memungkinkan anggota tertentu dipilih dalam inisialisasi agregat, misalnya dengan menggunakan sintaks Type t { .member = expr }.
  • Dukungan Lambda telah di-overhaul, mengatasi sejumlah besar bug yang sudah lama ada. Perubahan ini diaktifkan secara default saat menggunakan /std:c++20 atau /std:c++latest. Dalam mode bahasa /std:c++17 dan di bawah mode default (/std:c++14 ), pengurai baru dapat diaktifkan dengan menggunakan /Zc:lambda di Visual Studio 2019 versi 16.9 atau yang lebih baru (sebelumnya tersedia sebagai /experimental:newLambdaProcessor dimulai pada Visual Studio 2019 versi 16.3), misalnya, /std:c++17 /Zc:lambda.

Peningkatan pustaka standar C++

  • Fitur C++20 ini telah ditambahkan ke implementasi C++ Standard Library kami, tersedia di bawah /std:c++latest:
    • starts_with dan ends_with untuk basic_string dan basic_string_view.
    • contains untuk kontainer asosiatif.
    • remove, remove_if, dan unique untuk list dan forward_list sekarang mengembalikan size_type.
    • shift_left dan shift_right ditambahkan ke <algorithm>.

C++ IDE

IntelliCode untuk C++

IntelliCode sekarang dikirim sebagai komponen opsional dalam Pengembangan Desktop dengan beban kerja C++. Untuk informasi selengkapnya, lihat IntelliCode C++ yang Ditingkatkan sekarang Dikirim dengan Visual Studio 2019.

IntelliCode menggunakan pelatihan ekstensifnya sendiri dan konteks kode Anda untuk menempatkan apa yang paling mungkin Anda gunakan di bagian atas daftar penyelesaian Anda. Dengan ini Anda tidak perlu menggulir sepanjang daftar. Untuk C++, IntelliCode menawarkan bantuan paling banyak saat menggunakan pustaka populer seperti pustaka standar.

Fitur IntelliCode baru (Model Kustom, dukungan C++, dan inferensi EditorConfig) dinonaktifkan secara default. Untuk mengaktifkannya, buka Alat > Opsi > IntelliCode > Umum. Versi IntelliCode ini telah meningkatkan akurasi dan mencakup dukungan untuk fungsi bebas. Untuk informasi selengkapnya, lihat Saran Penyelesaian Kode Yang Dibantu AI Hadir untuk C++ melalui IntelliCode.

Peningkatan Info Singkat

  • Tooltip Info Singkat sekarang mematuhi pewarnaan semantik editor Anda. Ini juga memiliki tautan Search Online baru yang akan mencari dokumentasi online untuk informasi tentang konstruksi kode yang diarahkan. Tautan yang disediakan oleh Info Singkat untuk kode berlekuk merah akan mencari kesalahan secara online. Dengan begitu Anda tidak perlu mengetik ulang pesan ke browser Anda. Untuk informasi selengkapnya, lihat Peningkatan Info Singkat di Visual Studio 2019: Pewarnaan dan Pencarian Online.

Peningkatan umum

  • Bilah Templat dapat mengisi menu menurun berdasarkan pembuatan templat tersebut di basis kode Anda.

  • Bola lampu untuk arahan #include yang hilang yang dapat diinstal vcpkg, dan pengisian otomatis paket yang tersedia untuk arahan CMake find_package.

  • Halaman Properti Umum untuk proyek C++ telah direvisi. Beberapa opsi sekarang tercantum di bawah halaman Tingkat Lanjut baru. Halaman Tingkat Lanjut juga menyertakan properti baru untuk arsitektur toolset pilihan Anda, pustaka debug, versi minor toolset MSVC, dan build Unity (jumbo).

Dukungan CMake

  • Kami memperbarui versi CMake yang dikirim dengan Visual Studio ke 3.14. Versi ini menambahkan dukungan bawaan untuk generator MSBuild yang menargetkan proyek Visual Studio 2019 serta API integrasi IDE berbasis file.

  • Kami telah menambahkan peningkatan ke Editor Pengaturan CMake, termasuk dukungan untuk Subsistem Windows untuk Linux (WSL) dan konfigurasi dari cache yang ada, perubahan pada akar build dan pemasangan default, dan dukungan untuk variabel lingkungan di konfigurasi Linux CMake.

  • Penyelesaian dan info singkat untuk perintah, variabel, dan properti CMake bawaan menjadikan pengeditan file CMakeLists.txt Anda lebih mudah.

  • Kami telah mengintegrasikan dukungan untuk mengedit, membangun, dan melakukan penelusuran kesalahan proyek CMake dengan Clang/LLVM. Untuk informasi selengkapnya, lihat Dukungan Clang/LLVM di Visual Studio.

Linux dan Subsistem Windows untuk Linux

Analisis Kode

Build jarak jauh

  • Sekarang pengguna dapat memisahkan komputer build jarak jauh dari komputer debug jarak jauh saat menargetkan Linux di proyek MSBuild dan CMake.

  • Pengelogan yang disempurnakan untuk koneksi jarak jauh mempermudah diagnosis masalah dalam pengembangan lintas platform.

Apa yang baru untuk C++ di Visual Studio versi 16.0

Untuk ringkasan fitur baru dan perbaikan bug di Visual Studio versi 16.0, lihat Apa yang Baru di Visual Studio 2019 versi 16.0.

Pengompilasi C++

  • Dukungan yang ditingkatkan untuk fitur C++17 dan perbaikan kebenaran, ditambah dukungan eksperimental untuk fitur C++20 seperti modul dan coroutine. Untuk informasi selengkapnya, lihat Peningkatan Kesesuaian C++ di Visual Studio 2019.

  • Opsi /std:c++latest kini menyertakan fitur C++20 yang belum tentu selesai, termasuk dukungan awal untuk operator <=> C++20 ("pesawat ruang angkasa") untuk perbandingan tiga arah.

  • Pengalih /Gm pengompilasi C++ sekarang tidak digunakan lagi. Pertimbangkan untuk menonaktifkan pengalih /Gm dalam skrip build Anda jika ditentukan secara eksplisit. Namun, Anda juga dapat dengan aman mengabaikan peringatan penghentian untuk /Gm, karena tidak diperlakukan sebagai kesalahan saat menggunakan "Perlakukan peringatan sebagai kesalahan" (/WX).

  • Saat MSVC mulai menerapkan fitur dari draf standar C++20 di bawah bendera /std:c++latest, /std:c++latest sekarang tidak kompatibel dengan /clr (semua flavor), /ZW, dan /Gm. Pada Visual Studio 2019, gunakan mode /std:c++17 atau /std:c++14 saat mengompilasi dengan /clr, /ZW, atau /Gm (tetapi lihat poin sebelumnya).

  • Header yang telah dikompilasi sebelumnya tidak lagi dihasilkan secara default untuk konsol C++ dan aplikasi desktop.

Codegen, keamanan, diagnostik, dan penerapan versi

Analisis yang disempurnakan dengan /Qspectre guna memberikan bantuan mitigasi untuk Spectre Variant 1 (CVE-2017-5753). Untuk informasi selengkapnya, lihat Mitigasi Spectre di MSVC.

Peningkatan pustaka standar C++

  • Implementasi fitur pustaka C++17 dan C++20 tambahan dan perbaikan kebenaran. Untuk informasi selengkapnya, lihat Peningkatan Kesesuaian C++ di Visual Studio 2019.

  • Clang-Format telah diterapkan ke header pustaka standar C++ untuk meningkatkan keterbacaan.

  • Karena Visual Studio sekarang mendukung Just My Code untuk C++, pustaka standar tidak perlu lagi menyediakan mesin kustom untuk std::function dan std::visit untuk mendapatkan efek yang sama. Menghapus mesin tersebut sebagian besar tidak memiliki efek yang dapat dilihat pengguna. Satu pengecualian adalah bahwa pengompilasi tidak akan lagi menghasilkan diagnostik yang menunjukkan masalah pada baris 15732480 atau 16707566 <type_traits> atau <variant>.

Peningkatan performa/throughput di pengompilasi dan pustaka standar

  • Membangun peningkatan throughput, termasuk cara linker menangani File I/O, dan waktu tautan dalam penggabungan dan pembuatan jenis PDB.

  • Menambahkan dukungan dasar untuk vektorisasi OpenMP SIMD. Anda dapat mengaktifkannya menggunakan pengalih /openmp:experimentalpengompilasi baru. Opsi ini memungkinkan perulangan yang dianotasi dengan #pragma omp simd agar berpotensi divektorisasi. Vektorisasi tidak dijamin, dan perulangan yang dianotasi tetapi tidak divektorisasi akan mendapatkan laporan peringatan. Tidak ada klausa SIMD yang didukung; klausa diabaikan, dan peringatan dilaporkan.

  • Menambahkan pengalih baris perintah inlining baru /Ob3, yang merupakan versi yang lebih agresif dari /Ob2. /O2 (mengoptimalkan biner untuk kecepatan) masih menyiratkan /Ob2 secara default. Jika Anda menemukan bahwa pengompilasi tidak melakukan inline secara agresif, pertimbangkan untuk meneruskan /O2 -Ob3.

  • Kami telah menambahkan dukungan untuk fungsi intrinsik Short Vector Math Library (SVML). Fungsi-fungsi ini menghitung setara vektor 128-bit, 256-bit, atau 512-bit. Kami menambahkannya untuk mendukung vektorisasi perulangan tangan dengan panggilan ke fungsi pustaka matematika, dan operasi tertentu lainnya seperti pembagian bilangan bulat. Lihat Panduan Intrinsik Intel untuk definisi fungsi yang didukung.

  • Pengoptimalan baru dan yang disempurnakan:

    • Penyederhanaan lipatan konstan dan aritmetika untuk ekspresi menggunakan intrinsik vektor SIMD, untuk bentuk float dan bilangan bulat.

    • Analisis yang lebih kuat untuk mengekstrak informasi dari alur kontrol (pernyataan if/else/switch) untuk menghapus cabang selalu terbukti benar atau salah.

    • Unroll pada memset yang ditingkatkan untuk menggunakan instruksi vektor SSE2.

    • Peningkatan penghapusan salinan struct/class yang tidak berguna, terutama untuk program C++ yang melewati nilai.

    • Penyempurnaan pengoptimalan kode menggunakan memmove, seperti std::copy atau std::vector dan konstruksi std::string.

  • Mengoptimalkan desain fisik pustaka standar untuk menghindari kompilasi bagian pustaka standar yang tidak disertakan secara langsung. Perubahan ini memotong waktu build file kosong yang hanya mencakup setengah <vector>. Sebagai konsekuensinya, Anda mungkin perlu menambahkan arahan #include untuk header yang sebelumnya disertakan secara tidak langsung. Misalnya, kode yang menggunakan std::out_of_range sekarang mungkin perlu menambahkan #include <stdexcept>. Kode yang menggunakan operator penyisipan arus mungkin sekarang perlu menambahkan #include <ostream>. Manfaatnya adalah bahwa hanya unit terjemahan yang benar-benar menggunakan komponen <stdexcept> atau <ostream> yang membayar biaya throughput untuk mengompilasinya.

  • if constexpr diterapkan di lebih banyak tempat di pustaka standar untuk throughput yang disempurnakan dan pengurangan ukuran kode dalam operasi penyalinan, dalam permutasi seperti membalikkan dan memutar, dan di pustaka algoritma paralel.

  • Pustaka standar sekarang secara internal menggunakan if constexpr untuk mengurangi waktu kompilasi, bahkan dalam mode C++14.

  • Deteksi penautan dinamis runtime untuk pustaka algoritma paralel tidak lagi menggunakan seluruh halaman untuk menyimpan array penunjuk fungsi. Menandai memori ini sebagai baca-saja dianggap tidak lagi relevan untuk tujuan keamanan.

  • Konstruktor std::thread tidak lagi menunggu utas dimulai, dan tidak lagi menyisipkan begitu banyak lapisan panggilan fungsi antara pustaka _beginthreadex C yang mendasari dan objek yang dapat dipanggil yang disediakan. Sebelumnya std::thread meletakkan enam fungsi antara _beginthreadex dan objek yang dapat dipanggil yang disediakan. Jumlah ini telah dikurangi menjadi hanya tiga, dua di antaranya hanya std::invoke. Perubahan ini juga menyelesaikan bug waktu yang tidak jelas, di mana konstruktor std::thread akan berhenti merespons jika jam sistem berubah tepat pada saat std::thread sedang dibuat.

  • Memperbaiki regresi performa di std::hash yang kami perkenalkan saat menerapkan std::hash<std::filesystem::path>.

  • Pustaka standar sekarang menggunakan destruktor, bukan menangkap blok di beberapa tempat untuk mencapai kebenaran. Perubahan ini menghasilkan interaksi debugger yang lebih baik: Pengecualian yang Anda kembalikan melalui pustaka standar di lokasi yang terpengaruh sekarang muncul sebagai dikembalikan dari situs pengembalian aslinya, bukan pengembalian ulang kami. Tidak semua blok tangkapan pustaka standar dihilangkan. Kami mengusahakan agar jumlah blok tangkapan berkurang dalam rilis MSVC berikutnya.

  • Codegen suboptimal di std::bitset yang disebabkan oleh pengembalian kondisional di dalam fungsi noexcept diperbaiki dengan memperhitungkan jalur pengembalian.

  • Keluarga std::list dan std::unordered_* menggunakan iterator non-penelusuran kesalahan secara internal di lebih banyak tempat.

  • Beberapa anggota std::list diubah untuk menggunakan kembali node daftar jika memungkinkan daripada membatalkan alokasi dan mengalokasikannya kembali. Misalnya, mengingat list<int> yang sudah memiliki ukuran 3, panggilan ke assign(4, 1729) sekarang menimpa nilai int dalam tiga node daftar pertama, dan mengalokasikan satu node daftar baru dengan nilai 1729.

  • Semua panggilan pustaka standar ke erase(begin(), end()) diubah menjadi clear().

  • std::vector kini menginisialisasi dan menghapus elemen secara lebih efisien dalam kasus tertentu.

  • Peningkatan untuk std::variant membuatnya lebih ramah untuk pengoptimal, menjadikan kode yang dihasilkan lebih baik. Inlining kode sekarang jauh lebih baik dengan std::visit.

C++ IDE

Dukungan C++ Berbagi Langsung

Berbagi Langsung sekarang mendukung C++, memungkinkan pengembang menggunakan Visual Studio atau Visual Studio Code untuk berkolaborasi secara real time. Untuk informasi selengkapnya, lihat Mengumumkan Berbagi Langsung untuk C++: Berbagi dan Kolaborasi Real-Time

IntelliSense Templat

Bilah Templat sekarang menggunakan UI Peek Window dan bukan jendela modal, mendukung templat berlapis, dan mengisi argumen default apa pun ke dalam Peek Window. Untuk informasi selengkapnya, lihat Peningkatan IntelliSense Templat untuk Pratinjau 2 Visual Studio 2019. Daftar menurun Yang Terakhir Digunakan di Bilah Templat memungkinkan Anda beralih dengan cepat antara kumpulan argumen sampel sebelumnya.

Pengalaman jendela Mulai Baru

Saat meluncurkan IDE, jendela Mulai baru muncul. Jendela ini memiliki opsi untuk membuka proyek terbaru, mengkloning kode dari kontrol sumber, membuka kode lokal sebagai solusi atau folder, atau membuat proyek baru. Dialog Proyek Baru juga telah di-overhaul menjadi pengalaman yang dapat dicari terlebih dahulu dan difilter.

Nama baru untuk beberapa templat proyek

Kami telah memodifikasi beberapa nama dan deskripsi templat proyek agar sesuai dengan dialog Proyek Baru yang diperbarui.

Berbagai peningkatan produktivitas

Visual Studio 2019 mencakup fitur-fitur berikut yang akan membantu mempermudah coding dan lebih intuitif:

  • Perbaikan cepat untuk:
    • Menambahkan #include yang hilang
    • NULL ke nullptr
    • Menambahkan titik koma yang hilang
    • Mengatasi namespace atau cakupan yang hilang
    • Mengganti operand tidak langsung yang buruk (* ke & dan & ke *)
  • Info Singkat untuk blok dengan menunjuk kurung kurawal penutup
  • Peek Header / File Kode
  • Buka Definisi saat #include membuka file

Untuk informasi selengkapnya, lihat Peningkatan Produktivitas C++ di Pratinjau 2 Visual Studio 2019.

Dukungan CMake

  • Dukungan untuk CMake 3.14

  • Visual Studio sekarang dapat membuka cache CMake yang ada yang dihasilkan oleh alat eksternal, seperti CMakeGUI, sistem meta-build yang disesuaikan atau membangun skrip yang memanggil cmake.exe sendiri.

  • Performa IntelliSense yang disempurnakan.

  • Editor pengaturan baru menyediakan alternatif untuk mengedit file CMakeSettings.json secara manual, dan menyediakan beberapa paritas dengan CMakeGUI.

  • Visual Studio membantu bootstrap pengembangan C++ Anda dengan CMake di Linux dengan mendeteksi apakah Anda memiliki versi CMake yang kompatibel di komputer Linux Anda. Jika tidak, Visual Studio menawarkan untuk menginstalnya untuk Anda.

  • Pengaturan yang tidak kompatibel dalam CMakeSettings, seperti arsitektur yang tidak cocok atau pengaturan generator CMake yang tidak kompatibel, menampilkan lekukan di editor JSON dan kesalahan dalam daftar kesalahan.

  • Toolchain vcpkg secara otomatis terdeteksi dan diaktifkan untuk proyek CMake yang dibuka di IDE setelah vcpkg integrate install dijalankan. Perilaku ini dapat dimatikan dengan menentukan file toolchain kosong di CMakeSettings.

  • Proyek CMake sekarang mengaktifkan penelusuran kesalahan Just My Code secara default.

  • Peringatan analisis statis sekarang diproses di latar belakang dan ditampilkan di editor untuk proyek CMake.

  • Pesan build dan konfigurasi 'mulai' dan 'akhir' yang lebih jelas untuk proyek CMake dan dukungan untuk UI kemajuan build Visual Studio. Selain itu, sekarang ada pengaturan verbositas CMake di Alat > Opsi untuk menyesuaikan tingkat detail pesan build dan konfigurasi CMake di Jendela Output.

  • Pengaturan cmakeToolchain sekarang didukung di CMakeSettings.json untuk menentukan toolchain tanpa memodifikasi baris perintah CMake secara manual.

  • Pintasan menu Build All baru Ctrl+Shift+B.

Integrasi IncrediBuild

IncrediBuild sekarang dikirim sebagai komponen opsional dalam Pengembangan Desktop dengan beban kerja C++. IncrediBuild Build Monitor sepenuhnya terintegrasi dalam IDE Visual Studio. Untuk informasi selengkapnya, lihat Memvisualisasikan build Anda dengan Build Monitor incrediBuild dan Visual Studio 2019.

Awakutu

  • Untuk aplikasi C++ yang berjalan pada Windows, file PDB sekarang dimuat dalam proses 64-bit terpisah. Perubahan ini mengatasi berbagai crash yang disebabkan oleh debugger yang kehabisan memori. Misalnya, saat melakukan penelusuran kesalahan aplikasi yang berisi sejumlah besar modul dan file PDB.

  • Pencarian diaktifkan di jendela Watch, Autos, dan Locals.

Pengembangan desktop Windows dengan C++

  • Wizard ATL/MFC C++ ini tidak lagi tersedia:

    • Wizard Komponen ATL COM+ 1.0
    • Wizard Komponen Halaman Server Aktif ATL
    • Wizard Penyedia ATL OLE DB
    • Wizard Halaman Properti ATL
    • Wizard Konsumen ATL OLE DB
    • Konsumen ODBC MFC
    • Kelas MFC dari kontrol ActiveX
    • Kelas MFC dari Jenis Lib.

    Kode sampel untuk teknologi ini diarsipkan di Microsoft Learn dan repositori GitHub VCSamples.

  • Kit Pengembangan Perangkat Lunak (SDK) Windows 8.1 tidak lagi tersedia di alat penginstal Visual Studio. Sebaiknya tingkatkan proyek C++ Anda ke SDK Windows terbaru. Jika Anda memiliki dependensi tetap pada 8.1, Anda dapat mengunduhnya dari arsip SDK Windows.

  • Penargetan Windows XP tidak akan lagi tersedia untuk toolset C++ terbaru. Penargetan XP dengan kompilator & pustaka MSVC tingkat VS 2017 masih didukung dan dapat diinstal melalui "Komponen individu."

  • Dokumentasi kami secara aktif mencegah penggunaan Modul Penggabungan untuk penyebaran Visual C++ Runtime. Kami mengambil langkah tambahan pada rilis ini untuk menandai MSM sebagai tidak digunakan lagi. Pertimbangkan untuk memigrasikan penyebaran pusat VCRuntime Anda dari MSM ke paket yang dapat didistribusikan ulang.

Pengembangan seluler dengan C++ (Android dan iOS)

Pengalaman Android C++ sekarang menjadi default ke Android SDK 25 dan Android NDK 16b.

Toolset platform Clang/C2

Komponen eksperimental Clang/C2 telah dihapus. Gunakan toolset MSVC untuk kesesuaian standar C++ penuh dengan /permissive- dan /std:c++17, atau toolchain Clang/LLVM untuk Windows.

Analisis kode

Pengujian Unit

Templat Proyek Pengujian C++ Terkelola tidak lagi tersedia. Anda dapat terus menggunakan kerangka kerja Pengujian C++ Terkelola di proyek yang ada. Untuk pengujian unit baru, pertimbangkan untuk menggunakan salah satu kerangka kerja pengujian asli di mana Visual Studio menyediakan templat (MSTest, Google Test), atau templat Proyek Pengujian C# Terkelola.