พิจารณาโปรแกรมสาธิตต่อไปนี้
#include <iostream>
int main()
{
typedef float T;
0.f.T::~T();
}
Microsoft Visual Studio Community 2019
โปรแกรมนี้เป็นโปรแกรมที่รวบรวมโดย
แต่clang
และgcc
ออกข้อผิดพลาดเช่นนี้
prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T'
7 | 0.f.T::~T();
| ^~~~~
หากต้องการเขียนนิพจน์เช่น( 0.f ).T::~T()
นั้นคอมไพเลอร์ทั้งสามจะคอมไพล์โปรแกรม
ดังนั้นคำถามที่เกิดขึ้น: บันทึกนี้0.f.T::~T()
ถูกต้องตามหลักไวยากรณ์หรือไม่ และถ้าไม่เช่นนั้นกฎเกี่ยวกับวากยสัมพันธ์คืออะไร?
(0.f).T::~T();
float f = 1.0f.t;
จะสร้างข้อผิดพลาดเกี่ยวกับตัวอักษรตัวเลข
float
เป็นชนิดในตัวไม่มีตัวทำลายสำหรับให้คุณโทร คุณกำลังทำอะไรด้วยตนเองที่เรียกว่า destructors? นอกอาณาเขตใหม่ตำแหน่งที่ควรจะเป็นใหญ่ไม่มี
0.f
และ.T
เป็นสาเหตุที่ทำให้ทั้ง GCC และเสียงดังกราวจะยอมรับเรื่องนี้ ...