Dưới đây là một ví dụ mã:Là hằng số hằng số chức năng nội tuyến duy nhất?
enum Foo // or enum class whatever
{ BAR
, STUFF
};
inline const char* to_string(const Foo& foo)
{
static const char* const NAMES[] =
{ "BAR"
, "STUFF"
};
// let's assume I have some boundary checks here, it's not the point
return NAMES[foo];
};
Chức năng này là inline, là trong một tiêu đề được sử dụng trong một số đơn vị biên dịch. Mục tiêu ở đây là làm cho trình biên dịch không làm gì nếu không sử dụng chức năng này.
Câu hỏi:
- Liệu C++ đảm bảo tiêu chuẩn mà tên sẽ chỉ tồn tại trong một tập tin đối tượng, hoặc là nó để lại cho trình biên dịch để quyết định hay nó đảm bảo rằng tất cả các tập tin đối tượng sẽ có nó là bản sao?
- Nếu có nhiều bản sao, nó sẽ là một vấn đề liên kết (tôi giả sử tôi không thể kiểm tra đủ trình biên dịch để kiểm tra điều đó).
- Gcc, msvc và clang tất cả tối ưu hóa trong trường hợp này bằng cách làm cho nhị phân cuối cùng chỉ có một thể hiện của NAMES?
Một câu hỏi cho mỗi câu hỏi, vui lòng. –
@LightnessRacesinOrbit: "Yo dawg, tôi nghe bạn thích câu hỏi, vì vậy tôi đặt câu hỏi trong câu hỏi của tôi để bạn có thể trả lời trong khi bạn trả lời ..." – Mehrdad
Tôi muốn nói những câu hỏi này được kết nối đủ để được đăng trong một câu hỏi. – leftaroundabout