C++
 Computer >> コンピューター >  >> プログラミング >> C++

CとC++における文字リテラルの型の違い

CとC++における文字リテラルの型の違い

C++では、文字定数(文字リテラル)の型はchar型として扱われます。一方、C言語では文字定数は整数型(int型)として扱われるという重要な違いがあります。

そのため、32ビットアーキテクチャの環境では、C言語において sizeof('a') の結果は4となり、CHAR_BIT(char型1バイトあたりのビット数)は8です。ただし、sizeof(char) が1バイトである点は、CでもC++でも共通しています。

C言語の場合

#include<stdio.h>
main() {
   printf("%d", sizeof('a'));
}

出力結果:

4

C++の場合

#include<iostream>
using namespace std;
main(){
   cout << sizeof('a');
}

出力結果:

1

結果の解説

どちらのコードも同じ処理を行っていますが、実行結果が異なります。これは、C言語では 'a' が整数(int型)として扱われるため sizeof('a') が4を返すのに対し、C++では 'a' が文字(char型)として扱われるため1を返すからです。

このように、一見同じに見える文字リテラルでも、言語仕様上の型の扱いが異なるため、移植性のあるコードを書く際には注意が必要です。

  1. C++の文字リテラルと文字列リテラルの違いをわかりやすく解説

    C++における文字リテラルと文字列リテラルの基本C++では、シングルクォート( )で囲まれた1文字は「文字リテラル」として扱われ、その型は char になります。例えば a は char 型であり、ASCIIベースのシステムでは整数値 97 を持ちます。一方、ダブルクォート( )で囲まれた1文字または複数文字の並びは「文字列リテラル」として扱われます。その型は const char[] であり、実体は「文字列の長さ + 1」のサイズを持つ配列です。この余分な1文字分は、文字列の終端を示すヌル文字(\0)として確保されています。具体的な違いのポイント文字リテラル: 原則として1文字のみを格納する

  2. C++の文字リテラルとは?種類とエスケープシーケンスの使い方を解説

    文字リテラルとは文字リテラル(character literal)とは、プログラミングにおいて、ソースコード内で単一の文字の値を表現するためのリテラルの一種です。C++では、文字リテラルは定数文字で構成され、対象となる文字をシングルクォーテーション(一重引用符)で囲むことで表されます。文字リテラルの2つの種類C++の文字リテラルには、以下の2種類が存在します。ナロー文字リテラル:char型の文字リテラル。例:aワイド文字リテラル:wchar_t型の文字リテラル。例:La(先頭に L を付ける)通常のASCII文字などを扱う場合はchar型のナロー文字リテラルを使用し、Unicodeなどの多バイ