cuốn sách gpt4 ai đã làm

Các chữ basic_string có được xử lý nhanh hơn hoặc tốt hơn trong thời gian biên dịch không?

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 17:38:10 25 4
mua khóa gpt4 Nike

Trong khi duyệt bản nháp C++14/C++1y (n3690), tôi nhận thấy điều đó trong phần 21.7 chuỗi_cơ bản hậu tố văn bản:

chữ không gian tên nội tuyến {
không gian tên nội tuyến string_literals {
// 21.7, hậu tố cho chuỗi ký tự basic_string:
toán tử chuỗi "" s(const char *str, size_t len);
toán tử chuỗi u16 "" s(const char16_t *str, size_t len);
toán tử chuỗi u32 "" s(const char32_t *str, size_t len);
toán tử wstring "" s(const wchar_t *str, size_t len);
}
}

我的问题是:

  • chuỗi_cơ bản Có thể cho nghĩa đen nhanh hơn trong thời gian chạy không?
  • Việc triển khai "ngây thơ" của tôi có hoàn toàn sai không?
  • chuỗi_cơ bản Bố cục dữ liệu của văn bản trong ROM có thể khác hay có sự khác biệt nào khác giữa thời gian biên dịch và thời gian chạy không?

lý lịch

Tôi biết điều này cho phép sử dụng chuỗi ký tự trực tiếp như thế này:

std::string s1 = "Một chuỗi tuyệt vời"s;

void sfunc(std::string arg);

int chính() {
sfunc("đối số");
}

Nhưng so với sự phụ thuộchàm tạo chuyển đổi chuỗi(const char*) Những lợi thế là gì?

Mã "cũ" như sau:

std::string s1 = "Một chuỗi tuyệt vời"; // c'tor string(const char*)

void sfunc(std::string arg);

int chính() {
sfunc("argument"); // tự động chuyển đổi qua cùng một c'tor
}

据我所知,toán tử ""s() Việc thực hiện về cơ bản là như thế này:

std::toán tử chuỗi "" s(const char* lit, size_t sz) {
trả về std::string(lit, sz);
}

Vì vậy, chỉ cần sử dụng cùng một c'tor. Tôi đoán là việc này phải được thực hiện trong thời gian chạy, tôi có nhầm không?

biên tập: Cũng nhưNicol BolasNhư đã chỉ ra một cách chính xác bên dưới ví dụ của tôi,KHÔNGSử dụng cùng một hàm tạo nhưng có thêm độ dài - rõ ràng điều này rất hữu ích cho việc xây dựng. Điều này để lại cho tôi một câu hỏi: sẽ tốt hơn nếu trình biên dịch đưa chuỗi ký tự vào ROM hoặc làm điều gì đó tương tự vào thời gian biên dịch?

câu trả lời hay nhất

  • Có khả năng nhanh hơn trong thời gian chạy với các chữ basic_string không?

Như đã đề cập trước đó, độ dài chuỗi được biết và tự động được chuyển đến hàm tạo.

  • Việc triển khai "ngây thơ" của tôi có hoàn toàn sai không?

Không, điều đó đúng.

  • Bố cục dữ liệu trong ROM có thể khác với các chuỗi ký tự basic_string hoặc bất kỳ sự khác biệt nào khác ở thời gian biên dịch so với thời gian chạy không?

Có lẽ là không, vì liên quan chuỗi_cơ bản Người xây dựng không phải là constexpr Do đó, các điều kiện khởi tạo tĩnh không được đáp ứng nên có thể không được đặt trong ROM và phải được hoàn thành khi chạy.

Các chữ basic_string có được xử lý nhanh hơn hoặc tốt hơn trong thời gian biên dịch không? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/18439529/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress