Tôi đang viết một trò chơi Cocos2D-X, nơi người chơi, kẻ thù và các nhân vật khác lưu trữ các thuộc tính của họ trong một CCMutableDictionary
, đó là phần nào của một lớp trang trí cho std::map<std::string, CCObject*>
. Một giá trị trong từ điển có thể được truy cập thông qua phương thức CCMutableDictionary::objectForKey(const std::string& key)
.Cách thích hợp để thực hiện const std :: chuỗi trong tệp tiêu đề?
Bây giờ, trong một tập tin header bao gồm nhiều file cpp của tôi, tôi đã có một vài const char * const
dây để truy cập vào các giá trị trong từ điển, như thế này:
// in Constants.h
const char* const kAttributeX = "x";
const char* const kAttributeY = "y";
// in a .cpp file
CCObject* x = someDictionary->objectForKey(kAttributeX);
Vì vậy, chính xác cho tôi nếu tôi là sai, nhưng std::string
của nhà xây dựng sao chép đang được gọi và tạm thời std::string
là trên ngăn xếp mỗi khi tôi gọi một trong những phương pháp trên objectForKey
sử dụng một const char* const
, phải không?
Nếu vậy, tôi cảm thấy rằng sẽ hiệu quả hơn khi chạy nếu các khóa thuộc tính không đổi đó đã là std::string
đối tượng. Nhưng làm cách nào để làm điều đó theo cách phải?
Xác định chúng trong Constants.h nộp như sau biên dịch tốt, nhưng tôi có một cảm giác rằng một cái gì đó chỉ là không đúng:
// in Constants.h
const std::string kAttributeX = "x";
const std::string kAttributeY = "y";
lời xin lỗi của tôi nếu câu hỏi này đã được hỏi. Tôi dường như không thể tìm thấy câu trả lời chính xác mà tôi đang tìm kiếm ở đây trên StackOverflow.
Vì vậy, nếu các chuỗi được xác định trong tệp .cpp, khi nào chúng thực sự được khởi tạo? –
@NatWeiss Chúng sẽ được khởi tạo cùng với tất cả các biến toàn cục khác. –
Vấn đề với các biến được xác định nhiều lần áp dụng khi chúng là "const char * const"? Tôi khá chắc chắn nó không, nhưng tôi không hiểu tại sao. Điều gì mang lại "const char * const" đặc quyền được định nghĩa ở một vị trí duy nhất bao gồm giá trị của nó (đẹp hơn nhiều, IMO, đặc biệt là về bảo trì)? – Brent212