tôi chút nhầm lẫn về C++ mã sau:khởi của một const tĩnh biến
#include <iostream>
using namespace std;
void test(const string& str)
{
static const char * const c = str.c_str();
cout << c << endl;
}
int main(int argc, char* argv[])
{
test("Hello");
test("Nooo");
return 0;
}
Kể từ khi biến c
được khai báo là static
và const
, nên không này được khởi tạo một lần duy nhất và giữ giá trị ban đầu của nó cho đến khi quá trình hoàn thành? Theo lập luận này, tôi đã mong đợi đầu ra sau đây:
Hello
Hello
Nhưng tôi nhận:
Hello
Nooo
Bạn có thể làm rõ tại sao giá trị của biến c
đã được sửa đổi giữa hai chức năng cuộc gọi mặc dù nó biến số const
là gì?
Thực ra nó không được xác định. ** Dereferencing ** nó không xác định. Vì nó luôn có một địa chỉ hợp lệ khi bị hủy đăng ký, đây là một chương trình hợp lệ. – StoryTeller
@StoryTeller, 'cout << c << endl;' không coi trọng con trỏ. –
@StoryTeller Toán tử đầu ra sử dụng dereferencing. –