3

(4.4/1) から

タイプ「cv1 T へのポインター」の右辺値は、「cv2 T」が「cv1 T」よりも cv 修飾されている場合、「cv2 T へのポインター」タイプの右辺値に変換できます。</p>

標準が「より多くの cv-qualifield」タイプを定義する場所はわかりませんが、const を持つ宣言子は非 const よりも cv 修飾されていることを理解しました。

次の変換について、標準からの引用はどのように適合しますか、またはどちらが cv 修飾されていないか、またはより多く修飾されているかをどのように知ることができますか?

int *const c1 = 0;
int const* c2 = 0;
const int *const c3 = 0;

c1 = c2; // allowed
c1 = c3; // allowed

アップデート:

c2 = c1;
c2 = c3;
4

3 に答える 3

5

3.9.3/4 の表 6 は cv-qualifiers の半順序を示し、3.9.3/4 はさらに cv-qualifiedの定義も示しています。

  • cv修飾子なし<const
  • cv修飾子なし<volatile
  • cv修飾子なし<const volatile
  • const<const volatile
  • volatile<const volatile
于 2011-09-29T09:59:45.063 に答える
4

c1はポインター変数であるためconst(定数データへのポインターとは異なります)、変更できません。したがって、両方の代入は違法です。

標準が参照するのは、このケースです。

int *d1 = 0;
const int* d2 = d1; // d2 is more cv-qualified than d1
const volatile int* d3 = d1; // d3 is more cv-qualified than d2
于 2011-09-29T09:57:55.547 に答える
2

標準が「more cv-qualifield」タイプを定義する場所がわかりません

§3.9.3/4 です

cv 修飾子には (部分的な) 順序付けがあるため、型は別の型よりも cv 修飾されていると言えます。表 6 は、この順序付けを構成する関係を示しています。

表 6 — const と volatile の関係


no cv-qualifier  <  const  
no cv-qualifier  <  volatile   
no cv-qualifier  <  const volatile   
const            <  const volatile   
volatile         <  const volatile  

あれは、

  • const Tよりも cv 修飾されていTます。
  • volatile Tよりも cv 修飾されていTます。
  • const volatile Tよりも cv 修飾されていTます。
  • const volatile Tよりも cv 修飾されていconst Tます。
  • const volatile Tよりも cv 修飾されていvolatile Tます。
于 2011-09-29T10:02:18.143 に答える