2010-04-10 62 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

相关问题