CおよびC ++で呼び出される(…)は何ですか?


30

の用途の1つは、CおよびC ++の可変個のエンティティ...を示すことです。

それの名前は何?

そのように使用すると、演算子または何か他のものとして分類されますか?

に関するその他の詳細...

編集: 私はの目的を知ってい...ます。私はその名前と分類について質問しています。これは、CとC ++の両方で類似していると思います。



1
C可変個引数関数とC ++可変個引数テンプレート引数は完全に異なります。それを見つけたコンテキストを提供できますか?(PS、C / C ++は存在しません。1つ選択してください)
JVApen

1
名前と分類を知りたいだけです
Ardent Coder

回答:


43

これは区切り文字の 1つです。

6.4.6  Punctuators
Syntax punctuator:
     one of  [    ]    (    )    {   }    .    ->
             ++   --   &    *    +   -    ~    !
             /    %    <<   >>   <   >    <=   >=    ==   !=   ^   |   &&   ||
             ?    :    ;    ...
             =    *=   /=   %=   +=  -=   <<=  >>=   &=   ^=   |=
             ,    #    ##
             <:   :>   <%   %>   %:   %:%:

関数宣言では、省略記号と呼ばれます


省略記号は、一部のコンパイラC言語拡張機能でも使用されます。例-gccスイッチ/ケース範囲拡張

const char *test(unsigned num)
{
    switch(num)
    {
        case 0 ... 9:
            return "the value is in the 0 to 9 range";
        case 10 ... 99:
            return "the value is in the 10 to 99 range";
        default:
            return "out of tested range";
    }
}

https://godbolt.org/z/YBLma-


1
しかし、私の質問のコメントの1つがパラメーターパックについて言及したように、回答でそれをなぜ言及しなかったのですか?
Ardent Coder

3
C11標準へのリンク:port70.net/~nsz/c/c11/n1570.html#6.4.6
pmg

5
@ArdentCoder:パラメータパックであっても、C ++では省略記号と呼ばれます。
Nicol Bolas

4
式の一部を形成できないため、これは演算子で...はありませんC11§6.5で定義されている「式」の意味で)。他の句読点との共通点が 他にもあります。{ };
zwol

1
@zwol C ++では、トークン...を式の一部にすることができます。ただし、正式な構文では演算子とは見なされません。
アシェプラー


8

...の用途の1つは、CおよびC ++で可変個のエンティティを示すことです。`

はい、素人の用語...では、ユースケースの1つ以上(複数のドットを使用してさまざまなタイプに似ている場合があるなど)を表すと考えることができます。 C ++での「可変」引数/パラメーター)の場合、関数またはテンプレートの可変数の引数を参照します。

それの名前は何?

省略

そのように使用すると、演算子または何か他のものとして分類されますか?

いいえ、それはあなたがそれらを操作するのではなく、任意の数の引数を渡すことを可能にするので、それは演算子ではありません。

...に関するその他の詳細

私の知る限りでは -

  1. その特別な指定子。
  2. 省略記号は常に引数リストの最後に来ます。
  3. その使用に関する限り、テンプレート/関数のパラメーター数の制限を削除する場合、または拡張するために拡張可能なパラメーター数が必要な場合にのみ使用されます。(つまり、可変個のクラステンプレートまたは関数テンプレートでパラメーターパックの拡張を提供します)実際には、既知のパラメーターの固定セットがほとんど必要であるため、ほとんどの場合には適用できません。
  4. sizeofパック拡張としても分類されているため、オペレーターで使用できます。

編集:...名前と分類について質問している目的がわかっているので、CとC ++の両方で似ていると思います。

名前は同じですが、C ++とCでは使用方法が異なる場合があります。

前者の言語での使用にのみ精通している。(私はVariadicsの HackerRankの問題を覚えていて、そのユーティリティをカバーしています。)


3

3つの完全停止のシーケンスは...、CとC ++の両方で省略記号ます


C ++では、省略記号はさまざまな種類のパックの初期化と展開に役立ちます

  • A- タイプ識別子の間に省略記号parameter packがある場合
    Type ... identifier

  • A- pack expansionパターンと省略記号で構成されます
    pattern...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.