Sizeof c++ là gì

Kiểu trả về của toán tử sizeof là gì? cppreference.com & msdn cho biết sizeof trả về size_t. Nó có thực sự trả về size_t không? Tôi đang sử dụng VS2010 Professional và nhắm mục tiêu cho x64.

int main() { int size = sizeof(int); // No warning int length = strlen("Expo"); //warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data return 0; }

Tôi có câu hỏi này vì dòng đầu tiên không đưa ra bất kỳ cảnh báo nào, trong khi dòng thứ hai thì có. Ngay cả khi tôi thay đổi nó thành kích thước char, tôi không nhận được bất kỳ cảnh báo nào.

  • c++
  • visual-studio-2010
  • sizeof

50 hữu ích 5 bình luận 71k xem chia sẻ

answer

29

Sizeof c++ là gì

C ++ 11, §5.3.3 ¶6

Kết quả của sizeofvà sizeof...là một hằng số kiểu std::size_t. [Lưu ý: std :: size_t được định nghĩa trong tiêu đề chuẩn (18.2). - ghi chú cuối]

Bạn cũng có thể kiểm tra nhanh:

#include <iostream> #include <typeinfo> #include <cstdlib> int main() { std::cout<<(typeid(sizeof(int))==typeid(std::size_t))<<std::endl; return 0; }

kết quả chính xác 1trên máy của tôi.

Như @Adam D. Ruppe đã nói trong nhận xét, có lẽ trình biên dịch không phàn nàn vì, vì nó đã biết kết quả, nó biết rằng "chuyển đổi" như vậy không nguy hiểm

29 hữu ích 4 bình luận chia sẻ

answer

8

Sizeof c++ là gì

size_t là một bí danh của một số kiểu tích phân không dấu được xác định bằng cách triển khai. Trong C ++ ngược lại với C trong đó toán tử sizeof có thể được áp dụng cho mảng VLA, toán hạng của toán tử sizeof không được đánh giá (tại thời điểm chạy). Nó là một hằng số. Nếu giá trị của toán tử sizeof có thể vừa với kiểu int, trình biên dịch sẽ không đưa ra cảnh báo. Trong ví dụ thứ hai, std :: strlen được đánh giá tại thời điểm chạy nên kết quả của nó có thể không khớp với int nên trình biên dịch đưa ra cảnh báo. Bạn có thể thay thế std:; strlen bằng hàm constexpr của riêng bạn (một số hàm đệ quy). Trong trường hợp này nếu kết quả có thể vừa với int, tôi nghĩ rằng trình biên dịch sẽ không đưa ra cảnh báo.

8 hữu ích 0 bình luận chia sẻ

answer

2

Sizeof c++ là gì

Toán tử sizeof được sử dụng để lấy kích thước của các kiểu hoặc biến theo byte. Trả về kiểu số nguyên không dấu có ít nhất 16 bit. Nó được sử dụng để có được tính di động.

Cảnh báo này là do số nguyên không dấu được xác định là size_t.

2 hữu ích 1 bình luận chia sẻ

Sizeof c++ là gì

Đăng nhập để trả lời câu hỏi

Có thể bạn quan tâm

Sizeof c++ là gì

Toán tử sizeof khá đặc biệt so với các toán tử khác. Các toán tử chúng ta đã gặp cho đến nay được mã hoá dưới dạng các ký tự đơn trong khi toán tử sizeof trông giống như một biến.

Đừng nhầm lẫn: đây là toán tử tiền tố đơn phân và có mức ưu tiên cao nhất quả đất. Có một sự khác biệt nữa: một toán tử thông thường thì yêu cầu một giá trị như là đối số của nó và thường thay đổi giá trị theo những cách nhất định. Toán tử mới này mong muốn đối số của nó là một ký tự hoặc một biến hoặc một biểu thức được đặt trong dấu ngoặc đơn hoặc tên kiểu dữ liệu (đây là toán tử “C” duy nhất cho phép đối số của nó là một kiểu dữ liệu).

Toán tử sizeof cung cấp thông tin về bao nhiêu byte bộ nhớ mà đối số của nó chiếm (hoặc có thể chiếm). Cái tên của nó có vẻ đã nói lên tất cả phải không nào →

sizeof

Lưu ý:

  • không có khoảng trống giữa “size” và “of”
  • sizeof không chỉ là một toán tử – nó cũng là một từ khóa

Hãy xem đoạn code sau →

inti;charc;

i=sizeofc;

Biến i sẽ được gán giá trị 1 vì giá trị charluôn chiếm 1 byte bộ nhớ. Lưu ý rằng chúng ta có thể đạt được hiệu quả tương tự bằng cách viết:

Bạn có thể không sử dụng dấu ngoặc đơn khi đối số là một giá trị, nhưng bạn phải sử dụng chúng khi đối số là một kiểu dữ liệu


Xem tiếp đoạn code sau →

chartab[10];

inti=sizeoftab;

Biến i sẽ được gán giá trị là 10 vì đó là số byte bị chiếm bởi toàn bộ mảng tab.


Còn trong trường hợp này thì i sẽ bằng 1 →

chartab[10];

inti=sizeoftab[0];


Chúng tôi nghĩ rằng sẽ là một bài tập tốt nếu bạn code và chạy chương trình sau đây trên máy tính của bạn. Bằng cách này, bạn sẽ học được cách máy tính và trình biên dịch sử dụng bộ nhớ →

#include <iostream>

usingnamespacestd;

intmain(void){

    cout<<"This computing enviroment uses:"<< endl;

    cout<<sizeof(char)<<" bytes for chars"<<endl;

    cout<< sizeof(shortint)<<" bytes for shorts"<<endl;

    cout<<sizeof(int)<< " bytes for ints"<<endl;

    cout<<sizeof(longint)<<" bytes for longs"<< endl;

    cout<<sizeof(float)<<" bytes for floats"  <<endl;

    cout <<sizeof(double)<<" bytes for doubles"  <<endl;

    cout<< sizeof(bool)<<" byte for bools"<<endl;

    cout<<sizeof(int*)<< " bytes for pointers"<<endl;

    return0;

}

  • c++ cơ bản
  • operator
  • sizeof
  • toán tử