C中のconst修飾子やC ++でのconst修飾子の違いは何ですか?

ロバーツはモニカチェッリオをサポートしています。

I'veが見つかりました。コメント、ユーザのRを...

CおよびC ++は、同じ言語ではありません。具体的には、Cは、constC ++とは何の関係もありませんconst

私は違いの1つということ、知っているconstCで修飾子やconstC ++での修飾子がデフォルトリンケージです。

オブジェクトは、と名前空間スコープで宣言されたconstCに持つオブジェクトが、内部結合を有するC ++で修飾子const修飾子は(せずグローバルスコープで宣言staticする前に、修飾子const)外部結合を有しています。

しかし、どのように他の彼らは両方のCおよびC ++の言語間で異なるのですか?I'veは両方が両方の言語での概念と目的の同じ種類を持っていると思いました。

私の質問:

  • C中のconst修飾子やC ++でのconst修飾子の違いは何ですか?

回答「ポーラ」はどのようにCとC ++で異なりますか?正確な差異指していないの文脈におけるCおよびC ++の言語const修飾子を。あなただけが行うcan'tまたは特定の言語でそれで何ができますか。

ランディン:
  • 最も重要な違いは、C ++ということであるconst変数は、定数式(C ++ 11の前でも導入することであるconstexpr)が、constCにおける変数ではありません。

    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は、ハードウェア関連のプログラミングに適したままであることを意味します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=31245&siteId=1