C 中針對預設參數和可變參數在範本程式設計中的特殊用法:預設參數允許函數在沒有指定參數時使用預設值,從而實現函數重載的泛型化。可變參數允許函數接收任意數量的參數,實現了程式碼的通用性,可以用於處理任意數量的參數的函數或泛型化容器。實戰案例:實作了一個通用的小數格式化函數,使用預設參數為不同類型的小數指定不同的精度。
在C 模板程式設計中,預設參數和可變參數的使用可以大大增強程式碼的效率和通用性。讓我們探索它們的特殊用法:
預設參數
預設參數允許在呼叫函數時省略某些參數。當未指定參數時,將使用預設值。例如:
template<typename T, typename U = T> auto sum(T a, U b = 0) { return a + b; }
在上面範例中,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"
在模板程式設計中的特殊用法
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'; } }
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(); }我們可以在以下場景中使用此函數:
std::cout << format_float(3.14159265) << '\n'; // 输出:"3.14" (默认精度为 2) std::cout << format_float<float>(3.14159265, 6) << '\n'; // 输出:"3.141593" (精度为 6)
以上是C++ 函式預設參數和可變參數在範本程式設計中的特殊用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!