Làm thế nào để truyền các đối số tùy chọn cho một phương thức trong C ++? Bất kỳ đoạn mã nào ...
Làm thế nào để truyền các đối số tùy chọn cho một phương thức trong C ++? Bất kỳ đoạn mã nào ...
Câu trả lời:
Đây là một ví dụ về chế độ truyền làm tham số tùy chọn
void myfunc(int blah, int mode = 0)
{
if (mode == 0)
do_something();
else
do_something_else();
}
bạn có thể gọi myfunc theo cả hai cách và cả hai đều hợp lệ
myfunc(10); // Mode will be set to default 0
myfunc(10, 1); // Mode will be set to 1
NULL
nghĩa là một con trỏ NULL, mặc dù nó sẽ được định nghĩa là theo nghĩa đen 0
. Nó không phải là một cái tên phổ biến cho hằng số 0. Đối với số nguyên (không gợi ý), bạn nên sử dụng số: int mode = 0
.
Một quy tắc quan trọng liên quan đến việc sử dụng tham số mặc định: Các
tham số mặc định phải được chỉ định ở phần cuối bên phải, khi bạn chỉ định một tham số giá trị mặc định, bạn không thể chỉ định lại tham số không mặc định. Ví dụ:
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)
và muốn gọi foo(1,2)
, vì vậy chỉ đưa ra một tham số tùy chọn. Tôi dường như không thể tự mình làm cho nó hoạt động được.
Có thể thú vị với một số bạn rằng trong trường hợp có nhiều tham số mặc định:
void printValues(int x=10, int y=20, int z=30)
{
std::cout << "Values: " << x << " " << y << " " << z << '\n';
}
Cho các lệnh gọi hàm sau:
printValues(1, 2, 3);
printValues(1, 2);
printValues(1);
printValues();
Sản lượng sau được tạo ra:
Values: 1 2 3
Values: 1 2 30
Values: 1 20 30
Values: 10 20 30
Tham khảo: http://www.learncpp.com/cpp-tutorial/77-default-parameters/
Sử dụng các thông số mặc định
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 = ""
}
Lưu ý: Những điều sau đây là sai
template <typename T>
void func(T a = T(), T b )
template <typename T>
void func(T a, T b = a )
Để làm theo ví dụ được đưa ra ở đây, nhưng để làm rõ cú pháp với việc sử dụng tệp tiêu đề, khai báo hàm chuyển tiếp chứa giá trị mặc định tham số tùy chọn.
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();
}
Thông thường bằng cách đặt giá trị mặc định cho một tham số:
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;
}
Với việc giới thiệu std :: option trong C ++ 17, bạn có thể chuyển các đối số tùy chọn:
#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");
}
Đầu ra:
id=first param=<parameter not set>
id=second param=something