许多语言都有电力运营商; 为什么不用C++?例如,Fortran和Python使用**并且通常使用(例如在LaTeX中)编写^.
我在这里遇到了以下代码,它来自使用邻接矩阵的Dijkstra算法的C++实现.
//read in edges keeping only the minimum
for(int i=0; i<E; i++) {
int v1,v2,tmp;
fin >> v1; fin >> v2;
fin >> tmp;
adjmat[v1][v2]<?=tmp; // <?= sets left to min(left,right)
adjmat[v2][v1]<?=tmp;
}
Run Code Online (Sandbox Code Playgroud)
注意最后两行,它们适用于操作符<?=.正如评论所述,以下行
adjmat[v1][v2]<?=tmp; // <?= sets left to min(left,right)
将设置left为min(left,right).
我以前从未见过这个操作员.我试过VS中的代码,它无法编译.它是什么?它怎么能left成为min(left,right)?
因此,在研究了它到处之后,我似乎无法找到如何创建类箭头操作符,即
class Someclass
{
operator-> () /* ? */
{
}
};
Run Code Online (Sandbox Code Playgroud)
我只需要知道如何使用它并适当地使用它. - 它的投入是什么? - 它返回什么? - 我如何正确声明/原型化?
反引号运算符的固定性是什么?
例如,来自Real World Haskell的代码:
ghci> (1+) `fmap` [1,2,3] ++ [4,5,6]
[2,3,4,4,5,6]
Run Code Online (Sandbox Code Playgroud)
很明显,反引号操作符`fmap`具有更高的固定性++,但GHCi没有给出.
我对C++的这种行为感到困惑:
struct A {
virtual void print() const { printf("a\n"); }
};
struct B : public A {
virtual void print() const { printf("b\n"); }
};
struct C {
operator B() { return B(); }
};
void print(const A& a) {
a.print();
}
int main() {
C c;
print(c);
}
Run Code Online (Sandbox Code Playgroud)
那么,测验是,程序的输出是什么 - a或b?嗯,答案是答案.但为什么?
当我看到这样的东西(伪1线):
str1 + "a" + str2
Run Code Online (Sandbox Code Playgroud)
是否比以下(伪1线)更糟(或更好/相等)?
str1 + 'a' + str2
Run Code Online (Sandbox Code Playgroud)
更新:更好的例子(由@QPaysTaxes提供)以减少关于我原始示例的混淆.
我尝试了什么:
过去10年编程Java的各种东西,但我从来没有真正看到底层的东西 - 例如我会假设第二个稍微"更快/更好",因为没有为其创建的String-Object Java的斜杠标志和/或垃圾收集器必须处理更少.我曾经为Java证书做好准备,可能本来可以在那个时候更好地争论,但是我的日常业务似乎也是关于Java的"理论"必须保持最新...我知道没有任何比我indexOf('c')应该使用的假设更好的解释而不是indexOf("C")我想知道是否相同的字符串连接.
我也搜索了一下,但由于我的标题可能暗示我不太好描述我正在寻找的没有例子.对此我很抱歉,这个差点的可能性只是产生了重复.
我将尝试: 基于这里接受的答案字符串连接:concat()vs"+"运算符我希望能够有一个开始看到底层的什么,有一天能够争论/回答这样的问题,深入了解.
确切的情况是下一个:我在系统API定义结构CGPoint和CGSize,我希望能写my_point = my_size.我无法修改CGPointstruct,只能编写外部运算符.我可以编写二元运算符(+,-...),但operator=必须在struct内部声明.那还有其他解决方案吗?
我对Scala编程语言很陌生,在我在这里讲课时,正在尝试一些困扰我的想法.
我想我无法理解cons运算符是如何工作的,这里有一些我尝试过的东西:
我创建了一个伪随机数生成器,然后尝试创建一个随机值的列表:
scala> val gen = new java.util.Random
gen: java.util.Random = java.util.Random@1b27332
scala> gen nextInt 3 :: Nil
<console>:7: error: type mismatch;
found : List[Int]
required: Int
gen nextInt 3 :: Nil
^
Run Code Online (Sandbox Code Playgroud)
但它试图将List(3)传递给nextnt方法.当我使用paratheses时,没有问题
scala> (gen nextInt 3) :: Nil
res69: List[Int] = List(1)
Run Code Online (Sandbox Code Playgroud)
我对执行顺序感到好奇,所以我创建了一个检查它的函数
scala> def pr(i:Int):Int = { println(i); i }
pr: (i: Int)Int
scala> pr(1) :: pr(2) :: pr(3) :: Nil
1
2
3
res71: List[Int] = List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
如输出中所示,执行顺序与外观顺序相同.然后我认为它可能是关于'nextInt'功能,然后我尝试了以下:
scala> 1 + …Run Code Online (Sandbox Code Playgroud) 我正在使用Spidermonkey中的Parser API进行一些工作.文档显示有二元运算符...任何人有任何想法这是什么/呢?我很想知道.我以前从未见过它.如果我被迫猜测,我不得不说它与E4X有关,但这只是因为我对E4X一无所知.
只花了几个小时调试这段代码:
LinkedHashMap<String, Integer> rsrqs = new LinkedHashMap<String, Integer>();
Integer boxedPci = 52;
Integer boxedRsrq = boxedPci != null ? rsrqs.get(boxedPci.toString()) : -1;
Run Code Online (Sandbox Code Playgroud)
以上产生了NullPointerException.以下代码不:
LinkedHashMap<String, Integer> rsrqs = new LinkedHashMap<String, Integer>();
Integer boxedPci = 52;
Integer boxedRsrq = boxedPci != null ? rsrqs.get(boxedPci.toString()) : Integer.valueOf(-1);
Run Code Online (Sandbox Code Playgroud)
唯一的区别是用Integer.valueOf()包装-1.一旦有人解释了为什么这个代码的行为方式,我肯定我会打破我的前额..但有人可以向我解释为什么这个代码的行为方式:)
- 编辑
第二个想法,我怀疑NPE来自rsrqs.get()返回null,我认为java在尝试解包成int之前,然后再回到整数.Integer.valueOf()强制Java执行unbox-box步骤.故事的道德启示; 不要只忽略Eclipse中的那些拳击警告;)
operator-keyword ×10
c++ ×5
casting ×2
java ×2
autoboxing ×1
class ×1
cons ×1
haskell ×1
javascript ×1
list ×1
min ×1
operators ×1
overloading ×1
performance ×1
polymorphism ×1
scala ×1
string ×1
ternary ×1