พิจารณารหัสต่อไปนี้
void f(double p) {}
void f(double* p) {}
int main()
{ f(1-1); return 0; }
MSVC 2017 ไม่ได้รวบรวมสิ่งนั้น มันตัวเลขมีสายเรียกเกินไปคลุมเครือเป็น1-1
เป็นเช่นเดียวกับและดังนั้นจึงสามารถแปลงเป็น0
double*
เทคนิคอื่น ๆ เช่น0x0
, 0L
หรือstatic_cast<int>(0)
ไม่ทำงานอย่างใดอย่างหนึ่ง แม้แต่การประกาศ a const int Zero = 0
และการเรียกก็f(Zero)
ทำให้เกิดข้อผิดพลาดเดียวกัน มันทำงานได้เพียงอย่างถูกต้องหากไม่ได้เป็นZero
const
ดูเหมือนว่าปัญหาเดียวกันจะใช้กับ GCC 5 และด้านล่าง แต่ไม่ใช่ GCC 6 ฉันอยากรู้ว่านี่เป็นส่วนหนึ่งของมาตรฐาน C ++, ข้อผิดพลาด MSVC ที่รู้จักหรือการตั้งค่าในคอมไพเลอร์ Google คร่าวๆไม่ได้ผลลัพธ์
1-1
1
-