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 particulière des paramètres par défaut des fonctions C++ et des paramètres variables dans la programmation de modèles

WBOY
WBOYoriginal
2024-04-22 15:12:02644parcourir

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.

C++ 函数默认参数和可变参数在模板编程中的特殊用法

Utilisation spéciale des paramètres par défaut et des paramètres variables de la fonction C++ dans la programmation de modèles

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';
        }
    }
  • Dans cet exemple, 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);
    }
  • Utilisation spéciale dans la programmation de modèles
  • Générisation de la surcharge de fonctions :
  • Les paramètres par défaut peuvent généraliser les fonctions surchargées, éliminant le besoin de dépendances de paramètres spécifiques. Par exemple, nous pouvons fournir différents types de séparateurs par défaut dans une fonction d'impression universelle :
    template<typename T, typename Alloc = std::allocator<T>>
    class Vector {
    public:
        Vector(T... args) {
            for (auto arg : {args...}) {
                emplace_back(arg);
            }
        }
    };
  • Générisation du nombre de paramètres :
  • Les paramètres variadiques permettent à la fonction de gérer n'importe quel nombre de paramètres, obtenant ainsi une polyvalence de code. Par exemple, nous pouvons utiliser des arguments variadiques dans une fonction somme en passant n'importe quel nombre d'arguments :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn