Почему sizeof (! 0) печатает 1 вместо 4? - PullRequest
0 голосов
/ 06 октября 2018
#include <iostream>

int main()
{
    std::cout<<sizeof(0);
    return 0;
}

Здесь sizeof(0) - это 4 в C ++, потому что 0 - это целочисленное значение.

Но, если я напишу так:

std::cout<<sizeof(!0);

здесьsizeof(!0) - это 1.Но !0 означает, что он печатает 1, который также имеет тип int.

тогда, почему sizeof(!0) печатает 1 вместо 4?Что мне здесь не хватает?

Ответы [ 4 ]

0 голосов
/ 06 октября 2018

Когда мы пишем 0, это целое число, но когда мы пишем !0, оно неявно преобразует целое число в логическое значение.Оператор ! превращает любое целое число в логическое значение, вы можете попробовать написать !1, !2 .... все они дают размер 1 байта.если вы хотите знать размер !0 как int, вы можете указать его как

sizeof(int(!0));
0 голосов
/ 06 октября 2018

Оператор логического отрицания :

! rhs

Если операндом не является bool, он преобразуется в bool с помощью контекстного преобразования в bool:это только правильно сформировано, если объявление bool t (arg) правильно сформировано, для некоторого изобретенного временного t.

Результатом будет значение bool prvalue.

И sizeof (bool) который определен реализацией равен 1 в вашей реализации.

0 голосов
/ 06 октября 2018

Добавляя целочисленное значение к !, вы преобразуете его в логическое значение, которое может быть представлено одним байтом.

0 голосов
/ 06 октября 2018

!0 является bool.

sizeof(bool) зависит от реализации.

...