C++中省略号函数的函数调用中可以使用变量吗

Can variables be used in function call in ellipsis functions in C++

对于这个参数数量可变的函数,

void func(int count, ...)  // ellipsis function
{
// function definition
}

可以像下面这样进行函数调用吗:

int a{};
double b{};
string c{};

func(3,a,b,c); // using actual variables instead of fixed values in function call

我的问题是,当调用省略号函数时,它是否总是必须像 func(3,5,2.7,"Hi") 这样的 fixed 值,或者是否可以像 func(3,a,b,c) 那样在函数调用中提供变量?

虽然省略号为我们提供了一些有用的功能,但使用它们是相当危险的。使用省略号时,编译器不检查传递给函数的参数类型。因此,如果参数属于不同类型,编译器不会抛出任何错误。即使将字符串、双精度或布尔类型的值传递给 average() 函数 returns return 一个意外的值,编译器也不会抛出任何错误。

来源:https://www.geeksforgeeks.org/ellipsis-in-c-with-examples/

请注意,使用非平凡的复制构造函数或非平凡的移动构造函数或非平凡的析构函数传递 类,如 std::string,可能不受支持,并且具有“实现定义”的语义。您必须检查您的编译器文档以了解此类 类 是如何传递的,或者检查它们是否完全受支持。

Can variables be used in function call in ellipsis functions in C++

是的。

Can a function call be made like follows

是的。

when an ellipsis function is called does it always has to be just fixed values like func(3,5,2.7,"Hi")

没有

can variables be supplied in the function call like so func(3,a,b,c)?

是的。

Can you suggest any reference so I can do some research on it?

https://en.cppreference.com/w/cpp/language/variadic_arguments https://en.cppreference.com/w/cpp/utility/variadic https://eel.is/c++draft/expr#call-12

并且在 C++ 中,您应该强烈推荐:https://en.cppreference.com/w/cpp/language/parameter_pack,因为类型安全。