auto configuration_impl::get_hostname() const -> std::string {
return hostname;
}
Chào mọi người cho em hỏi là em có nên sử dụng auto thay thế cho int, double, float,… không và trong đoạn code trên “const -> std::string” có nghĩa là gì ạ
auto configuration_impl::get_hostname() const -> std::string {
return hostname;
}
Chào mọi người cho em hỏi là em có nên sử dụng auto thay thế cho int, double, float,… không và trong đoạn code trên “const -> std::string” có nghĩa là gì ạ
khai báo biến thì tùy ý thích :V mình thì chừng nào kiểu biến dài quá > 10 ký tự thì mới xài auto :V :V :V À hoặc phải suy nghĩ kiểu biến trả về của phép tính là gì thì xài auto khỏi phải suy nghĩ, vd
int a = 3;
double b = 4.4;
auto c = a * b; // xài auto khỏi suy nghĩ a*b trả về kiểu gì :V
còn cái khai báo hàm kiểu kia là kiểu “hiện đại” của C++. Thay vì khai báo
<kiểu trả về> <tên hàm>(...)
thì khai báo thành
auto <tên hàm>(...) -> <kiểu trả về>
lý do thì có lẽ là cho giống với kiểu khai báo lambda của C++ :V :V
auto myLambda = [](...) { ... };
nhưng thực tế thì viết -> kiểu trả về
gọn hơn vì kiểu trả về viết sau tên hàm sẽ biết scope của nó ở đâu luôn. Ví dụ
class LinkedList {
struct Node { ... }; // Node nằm trong class LinkedList
Node* begin(); // viết Node ở đây ko cần thêm LinkedList:: ở phía trước Node
};
// viết xuống dưới đây phải thêm LinkedList:: vào phía trước Node
LinkedList::Node* LinkedList::begin() { ... }
// viết kiểu hiện đại thì ko cần
auto LinkedList::begin() -> Node* { ... }
ngoài ra viết hàm kiểu auto <tên hàm>(...)
sẽ dễ dàng hơn cho việc viết regex match cho function để trích các function trong 1 header file ra hơn :V
cái const
kia là để báo hàm get_hostname()
này sẽ ko làm thay đổi giá trị của các biến trong class configuration_impl
đó. Ví dụ hàm thay đổi giá trị sẽ có tên là set_hostname(...)
thì ko có const
ở phía sau.