![](/img/trans.png)
[英]Can the C++ compiler optimize away the use of dummy variables that are used to pass the results of functions to another function?
[英]Can variables be used in function call in ellipsis functions in C++
对于这个采用可变数量 arguments 的 function,
void func(int count, ...) // ellipsis function
{
// function definition
}
可以按如下方式进行 function 调用:
int a{};
double b{};
string c{};
func(3,a,b,c); // using actual variables instead of fixed values in function call
我的问题是,当调用省略号 function 时,它是否总是必须是fixed
值,如func(3,5,2.7,"Hi")
或者可以在 function 调用中提供变量,如func(3,a,b,c)
?
请注意,像std::string
这样的传递类,具有非平凡的复制构造函数或非平凡的移动构造函数或非平凡的析构函数,可能不受支持,并且具有“实现定义的”语义。 您必须检查编译器文档以了解此类类的传递方式或检查它们是否受支持。
变量可以用于 function 调用中的省略号函数 C++
是的。
可以按如下方式进行 function 调用吗
是的。
当调用省略号 function 时,它是否总是必须是固定值,如 func(3,5,2.7,"Hi")
不。
可以在 function 调用中提供变量,如 func(3,a,b,c)?
是的。
您能建议任何参考,以便我可以对其进行一些研究吗?
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 ,因为类型安全。
虽然省略号为我们提供了一些有用的功能,但使用它们是非常危险的。 使用省略号时,编译器不会检查传递给 function 的 arguments 的类型。 因此,如果 arguments 属于不同类型,编译器不会抛出任何错误。 即使将字符串、双精度或布尔类型的值传递给 average() function 它返回一个意外的值,编译器也不会抛出任何错误。
资料来源: https://www.geeksforgeeks.org/ellipsis-in-c-with-examples/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.