次の方法で共有


静的整数型定数リンケージの非リテラル化

クラスの定数メンバーの宣言は、Visual C++ では C++ マネージ拡張から変更されています。

static const の整数メンバーは引き続きサポートされていますが、その linkage 属性は変更されています。現在は、literal の整数メンバーに以前の linkage 属性が格納されています。たとえば、次のマネージ拡張クラスを考えます。

public __gc class Constants {
public:
   static const int LOG_DEBUG = 4;
};

このコードは、このフィールドに対して次の CIL 基本属性を生成します (literal 属性に注意してください)。

.field public static literal int32 
modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)

このコードは新しい構文でもコンパイルされます。

public ref class Constants {
public:
   static const int LOG_DEBUG = 4;
};

ただし、literal 属性はもう生成されません。したがって、CLR ランタイムからは定数として見なされません。

.field public static int32 modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)

以前と同じように中間言語の literal 属性を生成するには、新たにサポートされた literal データ メンバーの宣言を次のように変更する必要があります。

public ref class Constants {
public:
   literal int LOG_DEBUG = 4;
};

参照

関連項目

リテラル (C++ コンポーネント拡張)

概念

クラスまたはインターフェイス内でのメンバー宣言 (C++/CLI)