5
ความพยายามในการกำหนดค่าเริ่มต้นของฉันถูกตีความเป็นการประกาศฟังก์ชั่นและเหตุใดจึงไม่ A (()); แก้มันได้หรือไม่
ในบรรดาหลาย ๆ สิ่ง Stack Stack ล้นได้สอนฉันคือสิ่งที่เรียกว่า "แจงที่สุด vexing" ซึ่งแสดงให้เห็นคลาสสิกกับสายเช่น A a(B()); //declares a function ในขณะนี้สำหรับส่วนใหญ่โดยสัญชาตญาณดูเหมือนจะเป็นการประกาศของวัตถุaประเภทAรับBวัตถุชั่วคราวเป็นพารามิเตอร์ตัวสร้างมันจริง ๆ แล้วการประกาศฟังก์ชั่นaกลับมาการAใช้ตัวชี้ไปยังฟังก์ชั่นที่กลับมาBและตัวเองไม่ใช้พารามิเตอร์ . ในทำนองเดียวกันบรรทัด A a(); //declares a function ยังอยู่ภายใต้หมวดหมู่เดียวกันเนื่องจากแทนที่จะเป็นวัตถุมันประกาศฟังก์ชั่น ตอนนี้ในกรณีแรกวิธีแก้ปัญหาตามปกติสำหรับปัญหานี้คือการเพิ่มชุดพิเศษของวงเล็บ / วงเล็บรอบในB()ขณะที่คอมไพเลอร์จะตีความมันเป็นการประกาศของวัตถุ A a((B())); //declares an object อย่างไรก็ตามในกรณีที่สองการทำเช่นเดียวกันทำให้เกิดข้อผิดพลาดในการคอมไพล์ A a(()); //compile error คำถามของฉันคือทำไม ใช่ฉันทราบดีว่า 'วิธีแก้ไข' ที่ถูกต้องคือเปลี่ยนเป็นA a;แต่ฉันอยากรู้ว่าอะไรคือสิ่งที่พิเศษ()สำหรับคอมไพเลอร์ในตัวอย่างแรกซึ่งไม่ทำงานเมื่อนำมาใช้ใหม่ ตัวอย่างที่สอง เป็นA a((B()));วิธีแก้ปัญหาข้อยกเว้นเฉพาะเขียนลงในมาตรฐานหรือไม่
158
c++