ฉันเลือกสิ่งนี้ในการโจมตีสั้น ๆ ของฉันเพื่อ reddit:
http://www.smallshire.org.uk/sufficientlysmall/2009/07/31/in-c-throw-is-an-expression/
โดยทั่วไปผู้เขียนชี้ให้เห็นว่าใน C ++:
throw "error"
คือการแสดงออก นี่เป็นการสะกดที่ชัดเจนในมาตรฐาน C ++ ทั้งในข้อความหลักและไวยากรณ์ อย่างไรก็ตามสิ่งที่ไม่ชัดเจน (สำหรับฉันอย่างน้อยที่สุด) คือประเภทของนิพจน์คืออะไร? ฉันเดาว่า " void
" แต่การทดลองเล็กน้อยกับ g ++ 4.4.0 และ Comeau ให้รหัสนี้:
void f() {
}
struct S {};
int main() {
int x = 1;
const char * p1 = x == 1 ? "foo" : throw S(); // 1
const char * p2 = x == 1 ? "foo" : f(); // 2
}
คอมไพลเลอร์ไม่มีปัญหากับ // 1 แต่ถูกกำหนดไว้ที่ // 2 เนื่องจากประเภทในตัวดำเนินการเงื่อนไขแตกต่างกัน ดังนั้นประเภทของthrow
นิพจน์ดูเหมือนจะไม่เป็นโมฆะ
แล้วมันคืออะไร?
หากคุณตอบได้โปรดสำรองข้อความของคุณด้วยคำพูดจาก Standard
สิ่งนี้ดูเหมือนจะไม่เกี่ยวกับประเภทของนิพจน์การโยนมากนักเนื่องจากตัวดำเนินการตามเงื่อนไขเกี่ยวข้องกับนิพจน์การโยนซึ่งเป็นสิ่งที่ฉันไม่รู้มาก่อนในวันนี้อย่างแน่นอน ขอบคุณทุกคนที่ตอบกลับ แต่โดยเฉพาะอย่างยิ่งกับ David Thornley