【问题标题】:What do carrot brackets do in C++?胡萝卜括号在 C++ 中的作用是什么?
【发布时间】:2016-09-10 02:37:45
【问题描述】:

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

例如:

int main(){  

    cout << "Hello World" << endl;
    return 0;

}

我只对上述函数的第一行感兴趣。如果我理解正确,cout 会打印后面的变量或值,而 endl 表示行尾,同时表示 "\n"

我在谷歌上搜索过 C++ 运算符和关键字,这两个都没有出现在列表中,尽管

为了澄清我来自 Python/Java 背景,所以我希望使用逗号或加号。我想知道

谢谢。

【问题讨论】:

  • 谷歌:运算符重载。
  • 那些真的carrot(?!)括号吗?
  • 您的意思是“插入符号”吗? &lt;&gt; 字符确实类似于 caret 字符 ^。但我从未听说过在这种情况下使用任何一个术语。 &lt;&gt; 字符通常分别称为“小于”和“大于”。
  • @ForceBru 我只听说过“尖括号”...
  • @ForceBru 不,它们是鳄鱼嘴;)

标签: c++ syntax operators


【解决方案1】:

这些不是“胡萝卜括号”。 &lt;&lt; 是左移运算符,仅此而已。

您可以使用 &lt;&lt; 打印内容,因为 C++ 允许您更改运算符对特定类的行为方式。这称为运算符重载&lt;&lt;重载以使std::cout 充当打印函数。

【讨论】:

  • 谢谢!这是唯一以这种方式重载的运算符吗?
  • @KarlaMiletti 据我所知,cout - 是的。其他一些类具有不同的自定义运算符。例如,您可以在std::cin 上使用&gt;&gt; 将内容读入变量。
  • @KarlaMiletti 不,不是。 + 被重载以供 std::string 执行连接而不是加法。
【解决方案2】:

在流的语义上下文中,&lt;&lt; 称为“流插入算子”,&gt;&gt; 称为“流提取算子”。从语法上讲,它们与语义上操作的左右移位算子相同整数。

从 Java 的上下文来看,您应该熟悉 + 运算符,根据其参数是整数、浮点数还是字符串(尽管 C++ 允许一般重载),它的作用会有所不同。

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

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

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

【讨论】:

  • 感谢您将您的答案与 Java 联系起来,这非常有帮助。是“刷新流”内存管理术语吗?
  • @KarlaMiletti No. 流是可以用于读取和/或写入内容的对象。 std::cout 是输出流的一个示例。出于性能原因,您放入流中的数据不会立即输出到屏幕(或文件,对于文件流)。相反,它不时以大块的形式输出。这种数据块的输出称为flushing
【解决方案3】:

C++ 允许运算符重载,因此&lt;&lt; 的含义会根据所涉及的类型而变化。 coutostream 类型,它重载 &lt;&lt; 以写入流。

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

【讨论】:

  • 感谢这份清单!我去看看。
猜你喜欢
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多