Mình đang xem bài thầy chi
-YC:Chia m phần thưởng cho n học sinh
-mình thấy có đoạn code này nhưng mình chả hiểu cái đoạn vòng for có cái đoạn " ::n " nghĩa là gì,bác nào thông não em phát,em cảm ơn
Hỏi về cú pháp lạ trong c++
Nhìn code em hiểu sơ sơ,rất mong bác nói rõ hơn ạ
Theo như @drgnz thì ::n là biến n toàn cục (có đúng không bạn?)
Trong code của bạn ấy up lên thì có 1 biến n ở ngoài là biến toàn cục, còn biến n ở trong là biến cục bộ.
Biến toàn cục và biến cục bộ có thể cùng tên.
Bạn tìm hiểu về biến toàn cục và biến cục bộ nhé.
Trường hợp này mình muốn lấy cả n global + n trong main + n namespace thì làm thế nào vậy?
Thì ra là còn cái trò này nữa…
Cái vụ gọi biến toàn cục trong hàm có biến cục bộ cùng tên này có phải là kết quả của một người “nghèo nàn về khả năng đặt tên biến” không vậy mọi người? Mình thấy chức năng này thật sự vô dụng
Đặt tên biến là một trong những “thuật toán” khó nhằn nhất trong lập trình mà bạn cũng không biết sao
chà chà cảm ơn bác nhé
Hang mang với 2 bác,thế rốt cục là nghèo tên biến quá nên họ mới đặt tên như vậy phải k?
Đúng roài, nói chung là không ai dại đi đặt tên biến giống nhau trong cả global và function cả :v
Hết hồn code :v
int n = 200;
namespace
{
int n = 100;
}
int main() {
// your code goes here
int n = 10;
std::cout << n << " " << ::n;
return 0;
}
trường hợp này thì in cả 3 n ra như nào vậy bạn?
Không biết giúp được bạn không:
Trường hợp này thì lấy được n ở ngoài cùng thôi bạn, giả sử mình xóa dòng int n = 200; đi thì kết quả ::n sẽ là 100 -> của namespace.
Vậy để lấy chính xác cả 3 thì làm cách nào nhỉ.
Bạn đặt tên cho namespace được không?
Dĩ nhiên là nếu deploy thì sẽ không dùng cái này rồi, nhưng để tìm hiểu thì mình vẫn muốn hiểu rõ nó hơn
Hự hự ,sau một hồi các bác vô phân tích kỹ hơn,thằng em đã " bặt vô âm tín " :))
~fly over~
namespace {
int n;
}
Được replace cho thằng static int n;
Khi viết code C, các biết toàn cục/hàm được gắn keyword static = các biết này chỉ đc xài trong file đó. -> Không thể access bởi các file ngoài. Tuy nhiên C++ thấy ko hay vì static ở C++ nó có nhiều công dụng và ý nghĩa khác nên dùng unnamed namespace để ‘hide’ đi.
~fly away~ :v
Vậy gọi unnamed namspace đó như thế nào để tường minh vậy bác?
Không thể gọi được unnamed namespace nếu như có biết trùng tên ở global.
Tuy nhiên có thể get như sau
namespace {
int n = 200;
int getN() {
return n;
}
}
Vì khi này getN và n trong cùng 1 scope nên nó lấy ra được
Và tất nhiên, như trường hợp trên là có n trong main scope nên nó tìm được n = 10
Nếu bỏ n trong main scope đi
Và global scope và unnamed namespace scope đều có n khi gọi n ra nó sẽ chửi cho vì không biết gọi n nào.
http://ideone.com/rvwXzG
Và khi đó phải thông qua scope resolution operator :: để gọi global n. Còn biết n trong namespace kia thì có thể get như trên.