Maison >développement back-end >C++ >Utilisation particulière des paramètres par défaut des fonctions C++ et des paramètres variables dans la programmation de modèles
Utilisation spéciale des paramètres par défaut et des paramètres variables dans la programmation de modèles en C++ : les paramètres par défaut permettent aux fonctions d'utiliser des valeurs par défaut lorsqu'aucun paramètre n'est spécifié, réalisant ainsi une surcharge de fonctions génériques. Les paramètres variables permettent aux fonctions de recevoir n'importe quel nombre de paramètres, obtenant ainsi une polyvalence de code et peuvent être utilisés pour des fonctions ou des conteneurs génériques qui gèrent n'importe quel nombre de paramètres. Cas pratique : Implémentation d'une fonction générale de formatage décimal, utilisant des paramètres par défaut pour spécifier différentes précisions pour différents types de décimales.
Dans la programmation de modèles C++, l'utilisation de paramètres par défaut et de paramètres variables peut considérablement améliorer l'efficacité et la polyvalence du code. Explorons leurs utilisations particulières :
Paramètres par défaut
Les paramètres par défaut permettent d'omettre certains paramètres lors de l'appel d'une fonction. Lorsque les paramètres ne sont pas spécifiés, les valeurs par défaut sont utilisées. Par exemple :
template<typename T, typename U = T> auto sum(T a, U b = 0) { return a + b; }
Dans l'exemple ci-dessus, b
est un paramètre par défaut avec une valeur par défaut de 0. Nous pouvons appeler cette fonction comme ceci : b
是一个默认参数,默认值为 0。我们可以像这样调用此函数:
int total = sum(10); // b 默认值为 0,结果为 10
可变参数
可变参数允许函数接收任意数量的参数。它们使用 ...
运算符表示。例如:
template<typename T> auto print_all(T... args) { for (auto arg : {args...}) { std::cout << arg << ' '; } std::cout << '\n'; }
在这个示例中,args
是一个可变参数包,可以接收任意数量的 T
print_all(1, 2.5, "hello"); // 输出:"1 2.5 hello"
Variadic
Variadic permet à une fonction de recevoir n'importe quel nombre d'arguments. Ils sont représentés à l'aide des opérateurs...
. Par exemple : template<typename T, typename D = char> auto print_delimited(T value, D delimiter = ' ') { std::cout << value; if constexpr (std::is_same_v<D, char>) { // 如果分隔符为字符 std::cout << delimiter; } else { // 如果分隔符为字符串 std::cout << delimiter << '\n'; } }
args
est un pack d'arguments variadique qui peut accepter n'importe quel nombre d'arguments de type T
. Nous pouvons appeler cette fonction comme ceci : template<typename T> auto sum_all(T... args) { return (... + args); }
template<typename T, typename Alloc = std::allocator<T>> class Vector { public: Vector(T... args) { for (auto arg : {args...}) { emplace_back(arg); } } };
template<typename T, typename D = T, D precision = 2> std::string format_float(T value) { std::stringstream ss; ss << std::fixed << std::setprecision(precision) << value; return ss.str(); }Générisation des conteneurs :
Les paramètres par défaut et les paramètres variadiques peuvent jouer un rôle clé dans la générification des conteneurs. Par exemple, nous pouvons créer un conteneur générique dont les types d'éléments peuvent être déduits de l'appel de fonction :
std::cout << format_float(3.14159265) << '\n'; // 输出:"3.14" (默认精度为 2) std::cout << format_float<float>(3.14159265, 6) << '\n'; // 输出:"3.141593" (精度为 6)🎜 Exemple pratique 🎜🎜🎜Créer une fonction de formatage décimal générique, en utilisant les paramètres par défaut pour spécifier différents types de décimales Précision : 🎜rrreee 🎜 Nous pouvons utiliser cette fonction dans les scénarios suivants : 🎜rrreee
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!