2

私の質問は特定の問題とは関係ありません。むしろ、プログラミングのスタイルを指しています。
私が読んだすべての記事や本で、本当に必要がない場合はグローバル変数を使用すべきではないと述べています。ひどい欠陥を名前空間に配置することはできません。

名前空間での #define のような動作を可能にする機能を c++ に持たせたいことがよくあります。

例:

namespace Space
{
replace type variable = constructor(args);
replace type2 variable2(args);
}

void function(type variable);

int main()
{
    function(Space::variable);
}

「置換」はその機能の識別子です。その種類の変数は、コンパイル時に値に置き換える必要があります。

私の質問:
1) グローバル定数を使用せずに美しく明確なコードを実現する
方法 2) このアイデアを C++ 標準にどのように提案できるか (オプション)
3) アイデアの欠点はどこにあるか (オプション)

4

3 に答える 3

9

1) グローバル定数を使用せずに美しく明確なコードを実現する方法

グローバル定数を使用するだけです。マクロはだめです。

2) このアイデアを C++ 標準にどのように提案できるか (オプション)

しないでください。拒否されたより良い提案がすでにあります。

3) アイデアの欠点はどこですか (オプション)

マクロはだめです。このように使用しないでください。標準を変更する必要はありません。

于 2013-02-25T10:37:36.113 に答える
6

グローバル共有状態に対する一般的なルールをグローバル変数に対するルールと間違えています。定数は不変であるため、状態を構成せず、完全に安全に使用できます。むしろ、ルールはすべてのグローバル変数がである必要があるということconstです。

于 2013-02-25T10:56:26.793 に答える
0
  • グローバルconstは よりもはるかに優れてい#defineます。#defineによって規制されておらず、あいまいな問題を引き起こすことが知られています (ただし、そのほとんどは関数のようなマクロnamespaceによって引き起こされます)。
  • 一番いいのは、名前空間によって規制されconstていることです(あなたが述べたように)。

私はよく使用します:

class SomeClass
{
  public:
    const static int STATIC_VALUE = 3;
};
const int SomeClass::STATIC_VALUE;//definition
于 2013-02-25T10:36:02.753 に答える