2012-01-16 21 views
6

Xcodeは言語の利用可能なメンバ関数についての洞察を提供し、今日気付いている奇妙なことではないにしても、例えばテキストメイトとの相対的な使い方を好んでいます。Xcode C++の開発、明確化が必要

iがしかし理解し、どのようなi see online署名が実際

string substr (size_t pos = 0, size_t n = npos) const; 

s.substr(1,2)がどうあるべきかから

enter image description here

に示すようstring s = "Test string";のみ使用可能substr署名です。 Xcodeで理解され、動作します。

私は方法を完了しようとするとなぜ表示されませんか? (Ctrl-Space)

+0

この時点でできることは、バグレポートを提出することです。優秀な説明のために – zneak

答えて

15

Xcodeは正常に完了していますが、期待通りのものではありません。実際にあなたは無意識に質問に答えました。あなたが言っただけのようstringのための関数のシグネチャsubstr()方法は、次のとおりです。

string substr (size_t pos = 0, size_t n = npos) const; 

substr()へのすべての引数は(引数なしで)、そのためのXcodeに、s.substr()をデフォルトの割り当てを持っているので、挿入する有効なコード補完ですは本当にs.substr(0, s.npos)です。これは、デフォルトの引数を持つ任意の数の標準C++関数で確認できます。これを見るのが最も簡単な場所は、STLコンテナコンストラクタです。

例えば、vectorとします。 vectorsAllocatorを受け取ることができますが、ほとんどの通常の使用ではAllocatorが割り当てられているデフォルトの引数は「十分」です。案の定、vectorコンストラクタのための署名の二つがある:両方の場合において

explicit vector (const Allocator& = Allocator()); 
explicit vector (size_type n, const T& value= T(), const Allocator& = Allocator()); 

Allocator引数は、デフォルトの割り当てを有し、そして第二に、Tデフォルト値は、デフォルトの割り当てを有します。 vectorを構築するときに今、Xcodeのは示唆して何を見てみましょう:

Xcode 4.2.1 Code Completions for vector constructor

提案をなし引数リストで実際だけAllocator取るコンストラクタです。 size_typeだけを使用する提案は、size_type,T、およびAllocatorのコンストラクタを実際にはのです。

これについての考え方によっては、Xcodeのバグである場合とそうでない場合があります。理想的には、substr()のような単純な関数のデフォルト引数で補完を見たいと思っていますが、STLコンテナのコンストラクタの場合は、ほとんど見たくないでしょう。多分それはオプションかもしれませんが、私はこれが修正されていることを期待しません。私は幸せにあなたと一緒にレーダーをdupしたいと思います。

+1

+1。 –

+0

Xcodeのもう一つのバグです。 – Florian

+0

好きな動作に応じてバグや機能を追加できます。 –

関連する問題