2011-01-19 36 views
13

thể trùng lặp:
C extension: <? and >? operators<? = Trong C++ là gì?

Hãy xem câu trả lời đầu (bởi sclo) cho vấn đề D Google Code Jam này. Đó là C++, nó phải đã biên soạn, và nó chứa tuyên bố như thế này một:

double& ret = F[mask][cur][b]; 
if(j==cur) { 
    ret<?=f(tmp,j,b||bad[i])+M[cur][i]; // WTF is <?= ??? 
} 

này không biên dịch trong Visual Studio của tôi năm 2008. nào <?= nghĩa là gì?

+0

Có thể là mã C++ 0x không ?! Nếu có, thì nó không thể được biên dịch trong VS2008. – Rafid

+0

Tôi không biết, phần mở rộng của tệp là CPP. Tôi đã mất liên lạc với ngôn ngữ C++ một vài năm trước đây. – ripper234

+0

Phải là một lỗi đánh máy, không phải g ++ hoặc clang ++ nhận ra nó. – ismail

Trả lời

19

Đó là một phần mở rộng gcc: C extension: <? and >? operators

hướng dẫn sử dụng gần đây say:

G ++ tối thiểu và khai thác tối đa ('<? 'và' >? ') và các hình thức hợp chất của họ (' <?=') và '>?=') đã không còn được dùng nữa và hiện đã bị xóa khỏi G ++. Mã sử ​​dụng các nhà khai thác cần được sửa đổi để sử dụng std::minstd::max thay vì ...

+2

+1: Bị xóa khỏi GCC xung quanh phiên bản 4 (từ câu trả lời trên trang được liên kết). – xk0der

0

Nó cũng không biên dịch với GCC và tôi chưa bao giờ nghe nói về nhà điều hành <?=.

Dù sao thì tôi sẽ nguy hiểm khi đoán rằng a<?=b có thể có ngữ nghĩa như: a = (a<b) ? b : a, nhưng một lần nữa, đây chỉ là phỏng đoán.

3

Đơn giản là không hợp lệ C++. < Có thể ít hơn, một khung góc mở cho một danh sách đối số mẫu, hoặc bắt đầu của một digraph tuy nhiên không phải của những người có thể được theo sau bởi ?, sau đó =.

3

Đó là một g ++ mở rộng bây giờ bị phản với c ngôn ngữ ++.

a <? b là giá trị nhỏ nhất, trả về giá trị số nhỏ hơn a và b;

a >? b là giá trị tối đa, trả về giá trị số lớn hơn a và b.

Ngoài ra còn có các phiên bản ghép

<?=

>?=

mà làm nhiệm vụ là tốt.