Могут ли переменные использоваться при вызове функций в функциях с многоточием в C++

0

Вопрос

Для этой функции, которая принимает переменное число аргументов,

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

Мой вопрос в том, когда вызывается функция с многоточием, всегда ли это должно быть просто fixed такие ценности, как func(3,5,2.7,"Hi") или переменные могут быть предоставлены в вызове функции следующим образом func(3,a,b,c)?

c++ ellipsis variadic-functions
2021-11-24 04:59:50
2

Лучший ответ

3

Обратите внимание, что прохождение таких классов, как std::string, с нетривиальным конструктором копирования или нетривиальным конструктором перемещения или нетривиальным деструктором, может не поддерживаться и имеет семантику, определяемую реализацией. Вы должны проверить документацию своего компилятора о том, как передаются такие классы, или проверить, поддерживаются ли они вообще.

Могут ли переменные использоваться при вызове функций в функциях с многоточием в C++

ДА.

Можно ли выполнить вызов функции следующим образом

ДА.

когда вызывается функция с многоточием, всегда ли это должны быть просто фиксированные значения, такие как func(3,5,2.7,"Привет")

Нет.

могут ли переменные быть предоставлены в вызове функции,например,so 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++черновик/expr#вызов-12

И в C++ вы должны решительно предпочесть: https://en.cppreference.com/w/cpp/language/parameter_pack , из-за безопасности типа.

2021-11-24 07:01:52
0

Хотя многоточие дает нам некоторые полезные функции, их использование довольно опасно. При использовании многоточия компилятор не проверяет тип аргументов, передаваемых функции. Таким образом, компилятор не выдает никаких ошибок, если аргументы имеют разные типы. Даже если значения типа pass string, double или bool передаются функции average (), которая возвращает неожиданное значение, компилятор не выдает никаких ошибок.

Источник : https://www.geeksforgeeks.org/ellipsis-in-c-with-examples/

2021-11-24 06:56:15

Это не помогает!
Pratap Biswakarma

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................