- Tìm số 0 đầu tiên trong một mảng bit
- Unix Hiển thị thông tin về các tập tin khớp với một trong hai mẫu
- Biểu thức chính quy thay thế nhiều tệp
- Ẩn lệnh từ xtrace
比较代码:
const char x = 'a';
std::cout<< x;
00C31000 mov eax,dword ptr [__imp_std::cout (0C32054h)]
00C31005 push eax
00C31006 call std::operator<<<> > (0C310B0h)
00C3100B add esp,4
Và
const int x = 'a';
std::cout<< x;
00271000 mov ecx,dword ptr [__imp_std::cout (272048h)]
00271006 push 61h
00271008 call dword ptr [__imp_std::basic_ostream<> >::operator<< (272044h)]
Và
const char* x = "a";
std::cout<< x;
00071000 mov eax,dword ptr [__imp_std::cout (72058h)]
00071005 push eax
00071006 call std::operator<<<> > (710B0h)
0007100B add esp,4
似乎 问题 - 为什么生成的代码存在差异?const int
版本比 const char*
和(更令人惊讶的)const char
优化得更好> 版本。
1 Câu trả lời
一些重载 toán tử<<
(包括 số nguyên
,但KHÔNG char
hoặc const char*
)是 std::ostream
的成员;有些是采用 std::ostream&
的非成员函数作为他们的第一个参数。
Microsoft 的编译器对成员函数和非成员函数使用不同的调用约定。我猜您正在为 32 位 Windows 构建。在这种情况下,成员函数将使用 thiscall
惯例,其中 cái này
在寄存器中传递 ecx
其余参数在堆栈上传递;和非成员函数使用 cdecl
约定,其中所有参数都在堆栈上传递。
关于c++ - 为什么 MSVC 不为 char 或 const char* 优化 cout 而为 int 优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14442563/
Đánh dấu là bài tập về nhà vì đây là bài tập giữa kỳ tôi đã viết, nhưng tôi không hiểu câu trả lời. Tôi được yêu cầu giải thích mục đích của mỗi const trong câu lệnh sau: const char const * const GetName() const { ret
const int* const fun(const int* const& p) const; Tôi đang cố gắng tìm ra các tham số đầu vào của nguyên mẫu hàm được cho này. Tôi đang phân vân giữa hai cách này và không biết cách nào là đúng.
Đoạn mã sau được sử dụng để giảm sự trùng lặp mã khi có cả phương thức getter hằng số và không hằng số. Nó tạo ra một phiên bản const từ một phiên bản không phải const. Tôi đã tìm kiếm một chút và nhiều người nói rằng tôi nên tạo phiên bản không phải const từ const.
Theo như tôi biết, TypeScript coi biến chuỗi const là một biến kiểu bất biến chỉ có giá trị đó và không có giá trị nào khác có thể có. Tôi luôn nghĩ rằng việc thêm const là thừa. Tại sao tôi nhận được thông tin sau trong phần thứ hai của ví dụ
Tôi có một phương thức với chữ ký sau: size_t advanceToNextRuleEntryRelatedIndex( size_t index, size_t nStrings, char const
Đầu tiên, sự khác biệt giữa: (1) const char* (2) char const* (3) const char const* Tôi khá chắc là tôi hiểu hoàn toàn điều này, nhưng tôi hy vọng ai đó có thể giải thích cụ thể cho tôi để tôi hiểu rõ hơn.
Người mới ở đây! Tôi đang đọc một đoạn mã và tôi thấy tác giả thường viết một hàm thành viên là const int func (const scalar& a) const // v.v. Bạn thấy đấy, có ba const ở đây, giờ thì tôi hiểu rồi
Tôi luôn bối rối về cách sử dụng const int*, const int * const và int const * một cách chính xác. Có bộ quy tắc nào quy định những điều bạn có thể và không thể làm không? Tôi muốn biết tất cả những việc cần làm và cách gán giá trị, truyền chúng vào các hàm, v.v.
Tôi đã thấy mã trong đó mọi người sử dụng const làm tham số hàm. Lợi ích của việc sử dụng const* so với const * const là gì? Đây có thể là một câu hỏi rất cơ bản nhưng tôi thực sự rất cảm kích nếu ai đó có thể giải thích. Bool làĐâyN
Tôi luôn bối rối về cách sử dụng const int*, const int * const và int const * một cách chính xác. Có bộ quy tắc nào quy định những điều bạn có thể và không thể làm không? Tôi muốn biết tất cả những việc cần làm và cách gán giá trị, truyền chúng vào các hàm, v.v.
Câu hỏi này đã có câu trả lời tại đây: Sự khác biệt giữa const int*, const int * const và int const * là gì? (23 câu trả lời
Mục đích của việc sử dụng từ khóa "const" trong tham chiếu là gì nếu đối tượng được tham chiếu không phải là đối tượng const? Có sự khác biệt nào giữa chức năng của r1 và r2 (xem bên dưới) không? int i = 42; // đối tượng không phải const cons
bạn ơi để mình giải thích tại sao const const const const const int const i = 0; lại là cú pháp hợp lệ. Tôi từ chối có bất kỳ suy nghĩ nào về chủ đề này. Mặc dù tôi tò mò liệu đây có phải chỉ là vấn đề cú pháp không? Biên tập
Tôi luôn mắc lỗi khi sử dụng const int*, const int * const và int const * một cách chính xác. Có bộ quy tắc nào quy định những điều bạn có thể và không thể làm không? Tôi muốn biết tất cả những điều cần lưu ý về phép gán, truyền cho hàm, v.v.
Tính hằng số trong const char* push(const char * const &&_data); có nghĩa là nội dung của tham chiếu không thể thay đổi. Tại sao tôi không thể truyền const char* vào push? Câu trả lời hay nhất cho thế hệ của bạn
Tôi có một câu hỏi liên quan đến các phương pháp hay nhất liên quan đến con trỏ trong tham số hàm và liệu chúng có nên được chỉ định là *const hay const *const . Tôi biết có nhiều ý kiến khác nhau về việc sử dụng hoặc lạm dụng const . , nhưng ít nhất cũng có một số công dụng để nắm bắt
Hiện tại tôi đang viết một bài tập cho lớp học của mình, bài tập này sẽ đóng vai trò như một lớp vỏ rất cơ bản. Tôi gần hoàn thành rồi, nhưng tôi đang gặp sự cố với execvp và mảng ký tự đối số của mình. Sau đây là một đoạn mã nhỏ của tôi. //Chia c bên trái
Vậy là tôi biết sự khác biệt giữa char const *, char * const và char const * const. Đó là: char* the_string : Tôi có thể thay đổi
Tôi đang chạy một số chương trình mẫu để làm quen lại với C++ và tôi gặp phải vấn đề sau. Đầu tiên, đây là mã mẫu: void print_string(const char * the_string) { cout << t
Tôi đang gặp vấn đề với lỗi biên dịch trong hệ thống của mình, đây là mã struct Strless: public binary_function { public: bool operator()(cons
Tôi là một lập trình viên xuất sắc, rất giỏi!