2017-04-16 57 views
6

AFAIK {} xác định phạm vi mới, vì vậy điều này xác định điều gì?Có gì ({}); Có nghĩa là trong C + +?

({}); 

Trình biên dịch biên dịch chương trình này cũng:

#include <iostream> 
#include <string> 

int main() 
{ 
    std::string name; 
    std::cout << "What is your name? "; 
    { 
    ({}); 
    } 
    getline (std::cin, name); 
    std::cout << "Hello, " << name << "!\n"; 
} 

Khi tôi thay ({}); với (); trình biên dịch không biên dịch chương trình.

Tại sao ({}); hoạt động tốt, nhưng (); thì không?

Tôi đã thử nghiệm chương trình trên cpp.sh. Nó biên dịch tốt.

+6

Trông giống như phần mở rộng trình biên dịch cho tôi. GCC với '-nút-lỗi' nói' lỗi: ISO C++ cấm các nhóm được đặt trong các biểu thức [-Wpedantic] '. – HolyBlackCat

+0

@HolyBlackCat tôi đã thử nghiệm chương trình trên http://cpp.sh/. nó biên dịch tốt –

+2

GCC có một số tiện ích mở rộng không chuẩn được bật theo mặc định. '-pedantic-errors' vô hiệu hóa chúng. '-pedantic' (hoặc' -Wpedantic') làm cho GCC tạo ra các cảnh báo khi chúng được sử dụng. Cpp.sh có một hộp kiểm để kích hoạt hộp thứ hai. – HolyBlackCat

Trả lời

8

({}); không phải là một phần của tiêu chuẩn C++. Như đã nói chính xác bởi @HolyBlackCat, đây là phần mở rộng của trình biên dịch. Sử dụng -pedantic-errors để tắt tiện ích mở rộng trình biên dịch.

Xem demo sống here khi biên soạn trên g++

Xem demo sống here khi biên soạn trên vc++.

+0

Vì vậy, VC là phù hợp hơn GCC tiêu chuẩn khôn ngoan khi nói đến điều này. Vâng, đó là lần đầu tiên. –

+4

@GillBates: Tại sao nó là lần đầu tiên? Xem các mảng có độ dài thay đổi cho một ví dụ phổ biến hơn về phần mở rộng trình biên dịch GCC được kích hoạt theo mặc định. Đáng buồn thay, cả GCC và VC cần phải được cho biết rõ ràng là tuân thủ theo tiêu chuẩn ISO (hoặc cố gắng tuân thủ nhất có thể). Bạn không thể chạy chương trình 'g ++ program.cpp' hoặc' cl.exe program.cpp' và mong đợi trình biên dịch hoạt động chính xác. –

+0

@Christian - Ít nhất đối với Microsoft, cài đặt mặc định luôn là * "Biên dịch càng nhiều mã càng tốt, vì vậy khách hàng sẽ không gọi hỗ trợ sản phẩm" *. Phân tích lợi ích chi phí. :-) –