2011-01-01 9 views
3

私は(ちょうどアイデアのように)C++ 0xでポインタのエイリアシングが途切れていると考えています。私はそれがコンパイラによって強制されるconstの正確さと同様に実装できるかどうかを考えていました。そのようなことに対する要件は何でしょうか?これはもっと多くの思想的な実験なので、私はレガシーコードを破壊したり、言語の半分やそのようなものを再定義するソリューションを見て満足しています。ポインタのエイリアシング - C++ 0x

プログラマーがちょうど約束しているところのC99の、restrictが私が実際にやっていることはありません。それは強制されるべきです。

私はunique_ptrがライブラリの一部ではなく、言語の一部であることを考えていました。そうすれば、コンパイラは特別な最適化を実行し、必要に応じて独自のポインタクラスを書くことができます。

+0

ライブラリ内で一意の/共有ポインタが実装されていることを嬉しく思っていますが、それらが言語の一部であるという考えにうんざりしています。最適化の可能性についてのあなたの見解に加えて、実際のポインタのような共変な戻り値の型としてスマートポインタを使うことが本当に好きです。 – mmocny

+0

大きな質問です。私は、これは[従属型](http://en.wikipedia.org/wiki/Dependent_type)と呼ばれるものが必要だと思うので、全体的にC++で全体的に巨大なものがなくてはできません。テンプレートのものではなく、コンピュータサイエンスからのものです)。 – GManNickG

+2

提案:その機能がすでに存在しているかのようにコード例を追加する;-) – umlcat

答えて

1

標準C++ライブラリ(std::unique_ptrを含む)は、です。

また、準拠プログラムは、宣言と定義をネームスペースstdに追加することはできません。 std::unique_ptr<T>のインスタンス化を見たら

、コンパイラは、このインスタンス化の動作に関するすべてを知っている - それは、まさに言語の実装の一部として実施されたその動作は、コンパイラ自体はの一部でありますと、コンパイラは無料ですC++標準の保証から来る「特別な最適化」を実行します。

GCCは同じ考え方の例として、ホスト型モードで標準のC99関数を多数使用しています。標準の関数呼び出しをインラインinsnシーケンスで置き換えたり、他の関数を呼び出したりすることができますGCCは関数の名前を知るだけで正確なセマンティクスを知っているからです。