Jenis tandatangan dalam pengisytiharan fungsi C++: Memahami pelbagai peraturan potongan jenis

WBOY
Lepaskan: 2024-05-04 09:36:01
asal
405 orang telah melayarinya

Tandatangan jenis dalam pengisytiharan fungsi C++ menentukan jenis input dan output fungsi Dengan memahami peraturan terbitan jenis, anda boleh menulis kod yang boleh dipercayai dan boleh diselenggara. Peraturan termasuk: Potongan templat: Parameter jenis disimpulkan daripada panggilan fungsi Inferens jenis automatik: Jenis disimpulkan daripada pemula atau nilai pulangan Jenis inferens: Pengkompil membuat kesimpulan jenis walaupun tidak dinyatakan secara eksplisit Spesifikasi jenis eksplisit: Pembangun secara eksplisit menentukan Tandatangan Jenis

C++ 函数声明中的类型签名:理解各种类型推导规则

Taip Tandatangan dalam Pengisytiharan Fungsi C++: Memahami Pelbagai Peraturan Potongan Jenis

Pengenalan

Tandatangan jenis merupakan aspek utama input dan fungsi output yang ditentukan. Dengan memahami peraturan jenis inferens, pembangun boleh menulis kod yang boleh dipercayai dan boleh diselenggara. Artikel ini akan menyelidiki tandatangan jenis dalam pengisytiharan fungsi dalam C++ dan menunjukkan pelbagai peraturan inferens jenis melalui kes praktikal.

Peraturan Potongan Jenis

Pengkompil C++ boleh menggunakan peraturan berikut untuk menyimpulkan jenis parameter fungsi:

  • Penolakan Templat: Apabila fungsi ditakrifkan sebagai fungsi templat, parameter jenis daripada panggilan fungsi.
  • Inferens jenis automatik (auto): Apabila mengisytiharkan pembolehubah atau parameter fungsi menggunakan kata kunci auto, jenis boleh disimpulkan daripada nilai pemula atau pulangan fungsi. auto 声明变量或函数参数时,类型可以从初始化器或函数返回值中推导出。
  • 类型推断:编译器可以推断出变量或函数参数的类型,即使没有明确指定。例如,它可以将 int 赋值给未声明类型的变量。
  • 显式类型指定:如果无法使用其他规则推导出类型,开发人员可以显式指定类型签名。

实战案例

案例 1:模板推导

template<typename T>
int sum(const std::vector<T>& numbers) {
  ... // 计算和返回数字之和
}
Salin selepas log masuk

在这段代码中,sum 函数是一个模板,其类型参数 T 从函数调用中推导出:

std::vector<int> numbers = {1, 2, 3};
int result = sum(numbers); // T 被推导出为 int
Salin selepas log masuk

案例 2:自动类型推导

auto sum(const std::vector<int>& numbers) {
  ... // 计算和返回数字之和
}
Salin selepas log masuk

在这里,sum 函数使用 auto 来声明返回值的类型。编译器将从函数内部的计算推导出类型为 int

auto result = sum({1, 2, 3}); // result 被推导出为 int
Salin selepas log masuk

案例 3:类型推断

int x = 10;
auto y = x + 10;
Salin selepas log masuk

在这个例子中,变量 x 声明为 int,而 y 声明为 auto。编译器将推断出 y 的类型也为 int

案例 4:显式类型指定

如果其他规则无法推导出类型,开发人员可以显式指定类型签名:

int sum(const std::vector<int>& numbers) -> int {
  ... // 计算和返回数字之和
}
Salin selepas log masuk

在这里,箭头 (->) 后面的 int 显式指定了函数的返回值类型为 int

🎜Inferens Jenis: 🎜Pengkompil boleh membuat kesimpulan jenis pembolehubah atau hujah fungsi, walaupun ia tidak dinyatakan secara eksplisit. Sebagai contoh, ia boleh menetapkan int kepada pembolehubah jenis yang tidak diisytiharkan. 🎜🎜🎜Spesifikasi jenis eksplisit: 🎜Jika jenis tidak boleh disimpulkan menggunakan peraturan lain, pembangun boleh menentukan tandatangan jenis secara eksplisit. 🎜🎜🎜Kes praktikal🎜🎜🎜🎜Kes 1: Derivasi templat🎜🎜rrreee🎜Dalam kod ini, fungsi sum ialah templat dan parameter jenisnya ialah T Disimpulkan daripada panggilan fungsi: 🎜rrreee🎜🎜Kes 2: Inferens jenis automatik 🎜🎜rrreee🎜Di sini, fungsi <code>sum menggunakan auto untuk mengisytiharkan jenis pulangan nilai . Pengkompil akan menyimpulkan jenis sebagai int daripada pengiraan di dalam fungsi: 🎜rrreee🎜🎜Kes 3: Jenis Inferens 🎜🎜rrreee🎜Dalam contoh ini, pembolehubah x diisytiharkan sebagai int, manakala y diisytiharkan sebagai auto. Pengkompil akan membuat kesimpulan bahawa y juga daripada jenis int. 🎜🎜🎜Kes 4: Spesifikasi jenis eksplisit🎜🎜🎜Jika peraturan lain tidak dapat menyimpulkan jenis tersebut, pembangun boleh menyatakan secara eksplisit tandatangan jenis: 🎜rrreee🎜Di sini, int selepas kod anak panah (->)> secara eksplisit menyatakan bahawa jenis nilai pulangan fungsi ialah <code>int. 🎜

Atas ialah kandungan terperinci Jenis tandatangan dalam pengisytiharan fungsi C++: Memahami pelbagai peraturan potongan jenis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!