参数的类型可以是 std::initializer_list<int>。这允许以下两种调用方式:

  • DoFunction({11,22,33})
  • DoFunction(11,22,33)(需配合 可变参数模板 才能支持)

示例如下:

#include <iostream>
#include <initializer_list>

void DoFunction(std::initializer_list<int> values) {
    for (int value : values) {
        std::cout << value << " ";
    }
    std::cout << std::endl;
}

int main() {
    DoFunction({11, 22, 33});  // 允许的调用方式
    // DoFunction(11, 22, 33); // ❌ 这种调用方式不适用于 std::initializer_list
    return 0;
}

如果希望支持 DoFunction(11,22,33) 这样的调用方式,需要使用 可变参数模板,如下:

#include <iostream>

template<typename... Args>
void DoFunction(Args... args) {
    (std::cout << ... << args) << std::endl;
}

int main() {
    DoFunction(11, 22, 33); // ✅ 变长参数支持
    return 0;
}

std::initializer_list<int> 无法直接与变长参数模板混用,所以两者适用于不同的场景。

Last modified: Thursday, 30 January 2025, 11:23 AM