Cada literal (constante) en C/C++ tendrá un tipo de información asociada. Tanto en C como en C++, los literales numéricos (p. ej., 10) tendrán int como tipo. Significa que sizeof(10) y sizeof(int) devolverán el mismo valor.
Si compilamos lo que hemos dicho en términos de código, se verá así.
Ejemplo:
C++
#include <bits/stdc++.h> using namespace std; int main() { cout<<sizeof(10)<<endl; cout<<sizeof(int)<<endl; return 0; }
C
// C program to illustrate that 'sizeof(10)' with its type 'int' // will return the same value as of 'sizeof(int)' #include <stdio.h> int main(void) { printf("%lu\n", sizeof(10)); printf("%lu\n", sizeof(int)); return (0); } // This code is contributed by sarajadhav12052009
Producción:
4 4
Sin embargo, los caracteres literales (por ejemplo, ‘V’) tendrán diferentes tipos, sizeof(‘V’) devuelve valores diferentes en C y C++. En C, un carácter literal se trata como tipo int mientras que, en C++, un carácter literal se trata como tipo char ( sizeof(‘V’) y sizeof(char) son iguales en C++ pero no en C. Veamos esto comportamiento interesante a través de un ejemplo.
C
#include <stdio.h> int main() { printf("%lu", sizeof('V')); printf("\n"); printf("%lu", sizeof(char)); return 0; } // Output // 4 // 1
C++
#include<bits/stdc++.h> using namespace std; int main() { cout<<sizeof('V')<<endl; cout<<sizeof(char)<<endl; return 0; } // Output // 1 // 1
Resultado del programa anterior:
- Resultado de C: tamaño de (‘V’) = 4 y tamaño de (char) = 1
- Resultado de C++: tamaño de (‘V’) = 1 y tamaño de (char) = 1
Más precisamente, podemos decir que en C, sizeof(‘V’) se tratará como un int sin signo largo, veamos un ejemplo para aclarar las cosas.
C
#include <stdio.h> int main() { printf("%d", sizeof('V')); return 0; }
Salida: dará este error.
source.c: In function 'main': source.c:7:10: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long unsigned int' [-Wformat=] 7 | printf("%d", sizeof('V')); | ~^ ~~~~~~~~~~~ | | | | int long unsigned int | %ld
Este comportamiento es necesario en C++ para admitir la sobrecarga de funciones. Un ejemplo lo hará más claro. Prediga la salida del siguiente programa en C++.
C++
#include<bits/stdc++.h> using namespace std; void foo(char c) { printf("From foo: char"); } void foo(int i) { printf("From foo: int"); } int main() { foo('V'); return 0; }
Producción:
From foo: char
El compilador debe llamar
void foo(char);
ya que el tipo ‘V’ es char .
Este artículo es una contribución de Venki . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA