Wie übergebe ich optionale Argumente an eine Methode in C ++? Beliebiges Code-Snippet ...
Wie übergebe ich optionale Argumente an eine Methode in C ++? Beliebiges Code-Snippet ...
Antworten:
Hier ist ein Beispiel für den Übergabemodus als optionaler Parameter
void myfunc(int blah, int mode = 0)
{
if (mode == 0)
do_something();
else
do_something_else();
}
Sie können myfunc auf beide Arten aufrufen und beide sind gültig
myfunc(10); // Mode will be set to default 0
myfunc(10, 1); // Mode will be set to 1
NULL
bedeutet einen NULL-Zeiger, obwohl er als Literal definiert wäre 0
. Es ist kein universeller Name für die Konstante Null. Für Ganzzahlen (Nichtzeiger) sollten Sie Zahlen verwenden : int mode = 0
.
Eine wichtige Regel in Bezug auf die Verwendung von Standardparametern:
Standardparameter sollten ganz rechts angegeben werden. Sobald Sie einen Standardwertparameter angegeben haben, können Sie keine Nicht-Standardparameter mehr angeben. Ex:
int DoSomething(int x, int y = 10, int z) -----------> Not Allowed
int DoSomething(int x, int z, int y = 10) -----------> Allowed
int foo(int x, int y = 10, int z = 10)
und aufrufen möchte foo(1,2)
, also nur einen optionalen Parameter angeben. Ich schien nicht in der Lage zu sein, es selbst zum Laufen zu bringen.
Für einige von Ihnen könnte es interessant sein, dass bei mehreren Standardparametern:
void printValues(int x=10, int y=20, int z=30)
{
std::cout << "Values: " << x << " " << y << " " << z << '\n';
}
Bei folgenden Funktionsaufrufen:
printValues(1, 2, 3);
printValues(1, 2);
printValues(1);
printValues();
Die folgende Ausgabe wird erzeugt:
Values: 1 2 3
Values: 1 2 30
Values: 1 20 30
Values: 10 20 30
Referenz: http://www.learncpp.com/cpp-tutorial/77-default-parameters/
Verwenden Sie Standardparameter
template <typename T>
void func(T a, T b = T()) {
std::cout << a << b;
}
int main()
{
func(1,4); // a = 1, b = 4
func(1); // a = 1, b = 0
std::string x = "Hello";
std::string y = "World";
func(x,y); // a = "Hello", b ="World"
func(x); // a = "Hello", b = ""
}
Hinweis: Die folgenden sind schlecht geformt
template <typename T>
void func(T a = T(), T b )
template <typename T>
void func(T a, T b = a )
Um dem hier angegebenen Beispiel zu folgen, aber um die Syntax mithilfe von Header-Dateien zu verdeutlichen, enthält die Funktionsvorwärtsdeklaration den optionalen Parameterstandardwert.
myfile.h
void myfunc(int blah, int mode = 0);
myfile.cpp
void myfunc(int blah, int mode) /* mode = 0 */
{
if (mode == 0)
do_something();
else
do_something_else();
}
In der Regel durch Festlegen eines Standardwerts für einen Parameter:
int func(int a, int b = -1) {
std::cout << "a = " << a;
if (b != -1)
std::cout << ", b = " << b;
std::cout << "\n";
}
int main() {
func(1, 2); // prints "a=1, b=2\n"
func(3); // prints "a=3\n"
return 0;
}
Mit der Einführung von std :: optional in C ++ 17 können Sie optionale Argumente übergeben:
#include <iostream>
#include <string>
#include <optional>
void myfunc(const std::string& id, const std::optional<std::string>& param = std::nullopt)
{
std::cout << "id=" << id << ", param=";
if (param)
std::cout << *param << std::endl;
else
std::cout << "<parameter not set>" << std::endl;
}
int main()
{
myfunc("first");
myfunc("second" , "something");
}
Ausgabe:
id=first param=<parameter not set>
id=second param=something