(…) เรียกใน C และ C ++ คืออะไร


30

หนึ่งของการใช้งานของ...คือการแสดงvariadicหน่วยงานใน C และ C ++

มันชื่ออะไร?

มันจัดอยู่ในประเภทโอเปอเรเตอร์หรืออย่างอื่นเมื่อใช้งานในลักษณะนั้นหรือไม่?

รายละเอียดอื่น ๆ เกี่ยวกับ...?

แก้ไข:...ฉันรู้ว่าวัตถุประสงค์ของการ ฉันถามชื่อและการจำแนกซึ่งฉันหวังว่าจะคล้ายกันในทั้ง C และ C ++



1
ฟังก์ชัน C Variadic และ C ++ อาร์กิวเมนต์เท็มเพลตแตกต่างกันอย่างสิ้นเชิงคุณสามารถให้บริบทที่คุณพบมันได้หรือไม่ (ไม่มี PS, C / C ++ โปรดเลือกหนึ่งรายการ)
JVApen

1
ฉันแค่อยากรู้ชื่อและการจำแนกของมัน
Ardent Coder

คำตอบ:


43

มันเป็นหนึ่งในpunctuators

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

ในการประกาศฟังก์ชั่นที่เรียกว่าจุดไข่ปลา


จุดไข่ปลายังใช้โดยส่วนCขยายภาษาคอมไพเลอร์บางส่วน ตัวอย่าง - gcc switch / extension range range

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
อย่างไรก็ตามในฐานะที่เป็นหนึ่งในความคิดเห็นในคำถามของฉันพูดถึงเกี่ยวกับชุดพารามิเตอร์ทำไมคุณไม่พูดถึงมันในคำตอบของคุณ?
Coder กระตือรือร้น

3
ลิงก์ไปที่มาตรฐาน C11: port70.net/~nsz/c/c11/n1570.html#6.4.6
pmg

5
@ArdentCoder: มันยังคงเรียกว่าจุดไข่ปลาใน C ++ แม้สำหรับชุดพารามิเตอร์
Nicol Bolas

4
ฉันจะเพิ่มที่...เป็นไม่ได้ดำเนินการเพราะมันไม่สามารถเป็นส่วนหนึ่งของการแสดงออก (ในความรู้สึกของ 'การแสดงออก' ที่กำหนดโดยC11 §6.5 ) มันมีเหมือนกันกับ { }และ;มากกว่ากับ punctuators อื่น ๆ
zwol

1
@zwol ใน C ++ โทเค็น...สามารถเป็นส่วนหนึ่งของนิพจน์ได้ แต่ไม่ถือว่าเป็นโอเปอเรเตอร์โดยไวยากรณ์ที่เป็นทางการ
aschepler

8

The ...ถูกอ้างถึงว่าเป็นจุดไข่ปลาทั้งในภาษาอังกฤษและในมาตรฐาน C


8

หนึ่งในการใช้ ... คือการแสดงถึงเอนทิตีที่หลากหลายใน C และ C ++ '

ใช่ในแง่ของคนธรรมดา...สามารถคิดว่าเป็นการแสดงมากกว่าหนึ่งหรือทวีคูณ (ในเครื่องหมายวรรคตอนหลอกรหัสเราบางครั้งใช้จุดหลายจุดเพื่อคล้ายประเภทที่แตกต่างกัน) ของกรณีการใช้งานซึ่งถ้าเราพิจารณาความแปรปรวน ของอาร์กิวเมนต์ / พารามิเตอร์ 'ผันแปร') ใน C ++ มันจะอ้างถึงจำนวนตัวแปรของอาร์กิวเมนต์สำหรับฟังก์ชั่นหรือแม่แบบ

มันชื่ออะไร?

การตัดคำทิ้งจากประโยด

มันจัดอยู่ในประเภทโอเปอเรเตอร์หรืออย่างอื่นเมื่อใช้งานในลักษณะนั้นหรือไม่?

ไม่มันไม่ได้เป็นโอเปอเรเตอร์อย่างแน่นอนเพราะมันช่วยให้คุณผ่านการโต้แย้งจำนวนมากไม่ได้ใช้มัน

รายละเอียดอื่น ๆ เกี่ยวกับ ... ?

เท่าที่ฉันรู้ -

  1. มันเป็นตัวระบุพิเศษ;
  2. จุดไข่ปลามักจะอยู่ในรายการอาร์กิวเมนต์เสมอ
  3. เท่าที่เกี่ยวข้องกับการใช้งานจะใช้เฉพาะเมื่อคุณต้องการลบข้อ จำกัด เกี่ยวกับจำนวนของพารามิเตอร์สำหรับแม่แบบ / ฟังก์ชั่นหรือเมื่อคุณต้องการให้มีจำนวนพารามิเตอร์ที่ขยายได้สำหรับการขยาย (กล่าวคือมันมีการขยายตัวของชุดพารามิเตอร์ในเทมเพลตคลาส variadic หรือเทมเพลตของฟังก์ชั่น) ในทางปฏิบัติเราส่วนใหญ่ต้องการชุดของพารามิเตอร์ที่รู้จักกันคงที่ดังนั้นจึงไม่สามารถใช้ได้กับกรณีส่วนใหญ่
  4. มันสามารถใช้กับsizeofตัวดำเนินการได้เนื่องจากมันถูกจัดประเภทเป็นการขยายแพ็คเช่นกัน

แก้ไข:ฉันรู้ว่าจุดประสงค์ของ...ฉันกำลังถามเกี่ยวกับชื่อและการจัดประเภทของมันซึ่งฉันหวังว่าจะคล้ายกันในทั้ง C และ C ++

ชื่อนี้เหมือนกัน แต่การใช้งานอาจแตกต่างกันสำหรับ C ++ และ C

ฉันคุ้นเคยกับการใช้งานในภาษาเดิมเท่านั้น (ฉันจำได้ว่ามีปัญหา HackerRank กับVariadicsซึ่งครอบคลุมยูทิลิตี้)


3

ลำดับของการหยุดเต็มสามครั้ง...เรียกว่าจุดไข่ปลาทั้งใน C และ C ++


ใน C ++, จุดไข่ปลาจะช่วยให้การเริ่มต้นและขยายแตกต่างกันของแพ็ค

  • parameter pack- เมื่อมีการจุดไข่ปลาระหว่างประเภทและระบุ
    Type ... identifier

  • เอpack expansion- ประกอบด้วยรูปแบบและจุดไข่ปลา
    pattern...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.