0

C++のソース コードを読むことは、学習するのに良い方法であることは明らかです。また、C++ の機能についてほとんど知らない場合は、単純に興味深いものです。標準ライブラリのソースに関する限り、これは名前が醜いため困難です。

ソースコードが標準ライブラリに含まれる前に、何らかの後処理によって醜い化が行われますか? その場合、元のソース コードはどうなりますか? 醜悪でないC++ 標準ライブラリソース コードのリポジトリはありますか?

私はC++11を見ることに興味があり、特にC++14の機能については近日中に取り上げます。

この形式でコードを維持するのがとても楽しいとは想像できません....

編集:

このプロセスを廃止する提案がここにあります

4

1 に答える 1

7

標準ライブラリの実装から学ぶ場合、まず、標準ライブラリは、通常のユーザーが記述したコードには適用されない特定の厳しい制約に従わなければならないことに注意してください。また、標準 C++ ライブラリによって行われる操作のいくつかはやや難解であり、それらが通常のユーザーのコードで使用されたことがあるかどうか心配です (会社に低レベルのライブラリ チームがある場合、同様のことを行う可能性がありますが、 )。特に、標準ライブラリが従わなければならない制約は、使用される名前のいずれも、ユーザーがどこでも使用する名前と競合しないということです。ユーザーが変なマクロを定義する可能性があるため、標準ライブラリは、ヘッダー ファイルなど、ユーザーに表示されるコンテキストで標準ライブラリ用に予約された名前を使用する必要があります。

  • クラス、関数、列挙型などの標準 C++ ライブラリで使用される名前、またはそのタイムプレート (該当する場合) は予約されています。
  • アンダースコアの後に大文字が続くすべての名前、または 2 つの連続するアンダースコアを含む名前は、すべてのコンテキストで予約されています。
  • 他にも予約された名前がいくつかありますが、マクロ名のコンテキストではほとんど予約されていないため、通常はヘッダーでは使用されません。

標準 C++ ライブラリから特にコピーしたくないのは、インクルード ガードの命名です。これらは通常、1 つまたは 2 つのアンダースコアで始まり、すべて大文字です。ユーザーは、これらの識別子の使用が明確に許可されていない限り、これらの識別子を使用することはできません (たとえば、 and を使用できます__FILE____LINE__マクロによって展開できるプログラム内のどこにでも書き込むことは許可されていません_FOOBAR(つまり、書けると思います"_FOOBAR")。

あなたの実際の質問に答えるには: 私が知っているすべての標準 C++ ライブラリの実装 (libstdc++、libc++、Dinkumware、RougeWave、および私自身のもの) は、「醜い」名前を使用して記述されており、それらをこの形式に変換するプログラムはありません。基本的に、どのプログラムも多くの例外を処理する必要がありますが、これは非常に現実的ではありません。標準 C++ ライブラリの実装者は、変な名前に慣れてしまうだけだと思います。私の実装では、単純なスクリプトを使用して醜い化を取り消すことができるように、すべてに共通のプレフィックスを付けて名前を付けるように努力しましたが、sedどこでもそのパターンに従っていません。

于 2013-10-05T19:38:52.397 に答える