3

現在開発中のシステムには多くのクラスがあり、これらのクラスには何かの「名前」に関する配列があります。名前は最大 30 文字にする必要があります。

最初は 10 文字しか使用していませんでしたが、今は制限を増やす必要があります。ただし、この種の配列を多くの場所で使用しているため、制限を増やすには時間がかかります。などを使用した方が簡単#define NAME_SIZE 30で、20 前後ではなく 1 つの数値を変更するだけで済みます。

ただし、それが C++ で行うのが「合法的な」ことかどうかはわかりません。

将来的にはかなりの時間を節約できるので、私は尋ねています。

4

3 に答える 3

5

はい、技術的には何も問題はありませんが、通常は aよりも#define劣っています。const std::size_t MAX_NAME_SIZE = 30;std::string

Scott Meyers は、 The Keyhole Problemと呼ばれる無償の固定サイズを使用するシステムに関する興味深いコラムを書いています。

鍵穴問題は、ソフトウェアが見たいものや表現したいものを人為的に制限するたびに発生します。画像を見たいが、画像表示ソフトウェアが一度に表示できる画像の量を人為的に制限している場合、それが鍵穴の問題です。特定の長さのパスワードを指定したいのに、ソフトウェアが長すぎると言う場合、それは鍵穴の問題です。米国の電話番号を入力したいが、3 桁のプレフィックスと 4 桁の交換機の間にダッシュを挿入する従来の方法で、ソフトウェアがそれを拒否する場合、それは鍵穴の問題です。

ユーザーからの迷惑とは別に、システムをあらゆる種類のセキュリティ問題 (バッファ オーバーフローの悪用など) にさらすこともできます。

于 2012-08-09T10:23:31.243 に答える
3

はい、合法です。しかし、一般的には、マクロの代わりに実際の定数を使用することをお勧めします:

const int max = 30;
char blah[max];

もう 1 つの方法は、 a を使用しstd::string、ハードコードされた制限を持たないことです ( 0-1-無限の規則に従います)。

于 2012-08-09T10:23:35.353 に答える
0

はい、これは合法ですが、const int NAME_SIZE = 30;. これは、ヘッダー ファイルに安全に配置できます。非 const グローバル変数とは異なり、異なる変換単位 (cpp ファイル) に const 変数を持っていても、各定数はそれが定義されているファイルに対してローカルであるため、リンカーにとって問題はありません。

于 2012-08-09T10:27:11.873 に答える