胡萝卜括号在C ++中做了什么?

时间:2016-05-13 19:19:08

标签: c++ syntax operators

最近我一直在观看" C ++简介"视频,其中一些比其他视频更好地解释某些概念。但是,有一些视频没有解决,这就是胡萝卜括号的含义。

例如:

DataFrame df = sqlContext.read().json(input);
DataFrame dfMaxRaw = df.groupBy("id").max("val");
DataFrame dfMax = dfMaxRaw.select(
    dfMaxRaw.col("id").as("max_id"), dfMaxRaw.col("max(val)").as("max_val")
);
DataFrame combineMaxWithData = df.join(dfMax, df.col("id")
    .equalTo(dfMax.col("max_id")));
DataFrame finalResult = combineMaxWithData.filter(
    combineMaxWithData.col("id").equalTo(combineMaxWithData.col("max_id"))
        .and(combineMaxWithData.col("val").notEqual(combineMaxWithData.col("max_val"))) 
);

我只对上述功能的第一行感兴趣。如果我理解正确,cout会打印后面的变量或值,而endl表示行结束时代表int main(){ cout << "Hello World" << endl; return 0; }

我用谷歌搜索过的C ++运算符和关键字,虽然&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;显然也可以作为二元左移算子......

为了澄清我来自Python / Java背景,所以我期待一个逗号或附加符号。我想知道是否&lt;&lt;是相当于这些或做类似但不同的东西。

感谢。

3 个答案:

答案 0 :(得分:6)

这些不是&#34;胡萝卜括号&#34;。 <<是left-bitshift运算符,仅此而已。

您可以使用<<打印内容,因为C ++允许您更改操作符对特定类的行为方式。这称为运算符重载<< 重载std::cout表现为打印功能。

答案 1 :(得分:4)

C ++允许运算符重载,因此<<的含义会根据所涉及的类型而改变。 cout的类型为ostream,它会重载<<以写入流。

Here is a listing of many of them请注意,它不是一个完整的列表,因为您可以在ostream类之外定义运算符,如this example on MSDN of a Date中那样。

答案 2 :(得分:4)

在流的语义上下文中,<<被称为&#34;流插入运算符&#34; >>被称为&#34;流提取运算符。从语法上讲,它们与在整数上进行语义操作的左右移位运算符相同。

从Java的上下文中,您应该熟悉+运算符,它根据其参数是int,float还是字符串而有不同的行为(尽管C ++允许一般的重载)。

std::endl'\n'的不同之处在于它还会刷新流(请注意,std::cout默认情况下是行缓冲的,如果它要转到终端)。

使用+输出意味着会创建一堆不必要的临时字符串,而重载,(如&&||)会令人惊讶,因为它会隐藏内置的意思。

如果在C ++处于早期阶段时可以使用可变参数模板,它可能不会使用<<,而是使用成员函数。