CおよびC ++は、同じ言語ではありません。具体的には、Cは、
const
C ++とは何の関係もありませんconst
。
私は違いの1つということ、知っているconst
Cで修飾子やconst
C ++での修飾子がデフォルトリンケージです。
オブジェクトは、と名前空間スコープで宣言されたconst
Cに持つオブジェクトが、内部結合を有するC ++で修飾子const
修飾子は(せずグローバルスコープで宣言static
する前に、修飾子const
)外部結合を有しています。
しかし、どのように他の彼らは両方のCおよびC ++の言語間で異なるのですか?I'veは両方が両方の言語での概念と目的の同じ種類を持っていると思いました。
私の質問:
- C中のconst修飾子やC ++でのconst修飾子の違いは何ですか?
回答「ポーラ」はどのようにCとC ++で異なりますか?正確な差異指していない間の文脈におけるCおよびC ++の言語const
修飾子を。あなただけが行うcan'tまたは特定の言語でそれで何ができますか。
最も重要な違いは、C ++ということである
const
変数は、定数式(C ++ 11の前でも導入することであるconstexpr
)が、const
Cにおける変数ではありません。C ++は、あなたのようなことを行うことを可能にすることを意味し
const size_t n = 1; static int array[n];
ますが、Cは、おそらく歴史的な理由のために、それを許可していません。C ++では、
const
リンケージを決定する際に役割を果たしています。これは、C ++のバージョン間で異なっています。よるとcppreference.com(強調鉱山):名前空間スコープで宣言次の名前のいずれかが内部リンケージを持っています:
- 非揮発性の非鋳型(14 ++ C以降)非インライン(以降C ++ 17)非エクスポート(C ++ 20以降)const修飾変数のextern宣言されていない(constexprのを含む)が上がりません」 tは、以前に外部リンケージを持つように宣言しました。
Cでのに対し、
const
問題のみ宣言のスコープとストレージ・クラス指定-すべてのリンクを決定する際に役割を果たしていません。C ++では、次のことができます
const
メンバ関数を修飾します。それはメンバ関数の構文をサポートしていませんので、これはCでは不可能です。Cはできます
const
-qualified変数を初期化せずに宣言します。Cでは、私たちは書くことができますconst int x;
初期化子せずに、しかし、C ++はそれを許可していません。一見、これはCでの無意味な言語のバグのように見えるかもしれませんが、根拠は、コンピュータが読み取り専用にしていることをハードウェアではなくソフトウェアによって設定された値を持つハードウェアレジスタをあります。Cは、ハードウェア関連のプログラミングに適したままであることを意味します。