2010-04-10 60 views
6

任何人都可以幫助我瞭解的代碼下面一行:這個C++代碼是什麼意思是「sol <?= f((1 << n)-1,i,0)+ abs(P [i])* price;」

sol< ?=f((1<< n)-1,i,0)+abs(P[i])*price; 

我學習使用C++和它下面的操作< ?=編寫的算法。我的問題在於瞭解< ?=運營商。另外,當我使用g ++編譯器編譯此代碼時,它會給代碼行的上面一行代碼提供錯誤消息

以下是返回的錯誤消息。

Hello.cpp: In function ‘int main()’:

Hello.cpp:115: error: ‘memset’ was not declared in this scope

Hello.cpp:142: error: expected primary-expression before ‘?’ token

Hello.cpp:142: error: expected primary-expression before ‘=’ token

Hello.cpp:142: error: expected ‘:’ before ‘;’ token

Hello.cpp:142: error: expected primary-expression before ‘;’ token

也許< ?=它不是一個單一的運營商,但我不明白究竟這行代碼一樣。

在此處感謝您閱讀本文的時間。

+1

這條線的背景是什麼?你確定它實際上是C或C++嗎? – 2010-04-10 13:30:41

+0

嗨弗蘭克 這裏是完整的代碼http://pastebin.com/aSZCSeTZ。我從Google Code Jam 2008提交的算法中獲得了這一行代碼。該算法在該競爭中獲得了第一名。 – KItis 2010-04-10 13:35:40

+0

如果此代碼來自Google Code Jam 2008,那麼您可以在決賽列表中給出原始指針:http://code.google.com/codejam/contest/scoreboard?c=32011#vf=1 – 2010-04-10 14:09:25

回答

23

這是一個GNU擴展。它基本上是一個「低於」運營商。

int a = 3; 
a <?= 2; 
cout << a << endl; // prints 2, because 2 < 3 

a <?= 10; 
cout << a << endl; // prints 2 as well, because 10 > 2 

閱讀全文here

+0

感謝budy,你是一位英雄:) – KItis 2010-04-10 13:41:19

+7

你知道嗎,每當我想到我已經看到GCC的每一個壞消息時,我都會被更加邪惡的東西夾在眼中。爲你+1。 -100,000爲GCC團隊。啊! – 2010-04-10 13:42:06

+0

我編譯上面的代碼使用g ++編譯器,你有一些關於爲什麼返回上述錯誤的想法。 – KItis 2010-04-10 13:42:22

-1

這行不是一行代碼。這就是爲什麼它不能編譯。問這是什麼沒有意義。

+0

我想知道關於「<?=」運算符,我不期待在全線bcoz的解釋,我沒有包括其餘的代碼。 – KItis 2010-04-10 13:27:20

+0

沒有'<?='操作符;它也不是兩個操作員。重申一下,這不是代碼。它只是類似於代碼。 – 2010-04-10 13:28:39

+0

http://pastebin.com/aSZCSeTZ,這裏是我指的完整代碼的鏈接。這段代碼在Google Code Jam 2008中排在第一位。這就是爲什麼我有興趣知道它是如何工作的 – KItis 2010-04-10 13:33:34

0

看一看在C語法here

?唯一用途是在三元運算符:

conditional_expression 
    : logical_or_expression 
    | logical_or_expression '?' expression ':' conditional_expression 
    ; 

?後跟一個表達式。這不會發生在你的情況。所以,你的代碼是不是有效 C.

+0

http://pastebin.com/aSZCSeTZ,這裏是鏈接到完整的C++代碼我指的是 – KItis 2010-04-10 13:32:15

1

它幾乎可以是線的PHP代碼,但:它需要的只是刪除空間形成底。

<?= foo(); ?> 

相當於

<?php echo foo(); ?> 
+0

http: //pastebin.com/aSZCSeTZ這是我在這裏提到的完整的C++代碼。 – KItis 2010-04-10 13:31:36

2

對於任何閱讀本文並且無法關注的人來說都是明確的; <?=>?=是分配版本<?>?,它們是分別服務於(x>y)?x:y(x<y)?x:y的不推薦使用的GCC擴展。

因此,x <?= y;x = x <? y;這是x = (x<y) ? x : y;

大多數編譯器廠商引入語言擴展,許多使之成爲未來的語言標準。通常這些擴展只是很容易添加,或者使編寫標準庫的工作變得更容易。

+0

Thanx的信息 – KItis 2010-04-12 21:09:24

相關問題