使用“<<<”

时间:2016-09-20 11:24:26

标签: c++ cout

我对在屏幕上打印文字有疑问。我虽然没有有效的“+”运算符来输出流式文本。为什么这个有效:

std::cout <<  ("print this number " + boost::lexical_cast<std::string>(5) + ". " ) << std::endl;

尽管有这样的complie错误:

std::cout <<  ("print this number " + "5" + ". " ) << std::endl;

错误:类型'const char [19]'和'const char [2]'到二进制'operator +'的无效操作数

我使用 gcc 4.7.3 和C ++ 03。

4 个答案:

答案 0 :(得分:6)

boost::lexical_cast会返回std::string,其operator +(const char *, const std::string&)operator +(const std::string&, const char *)已为其定义。所以你的代码相当于:

std::cout << std::string("print this number 5. ") << std::endl;

operator +没有调用std::ostream个参数。

在第二行中,您尝试添加字符数组(例如const char [19]const char [2]),这是语言规则的错误。

答案 1 :(得分:3)

这是因为首先评估括号内的表达式。

std::string类型+。这会导致const char* std::string的操作符超载(两边),返回std::string

所以括号中表达式的类型<<,并且流为它重载"print this number " + "5" + ". "

最后+将无法编译,因为const char[]对{{1}}参数没有意义,即使它们衰减指针类型。

答案 2 :(得分:0)

显然,<<+之前执行 - 仅通过强制执行括号。 class Person { public string Name {get; set;} public int Amount {get; set;} } 运算符适用于它周围的字符串,为什么它不起作用?

答案 3 :(得分:0)

这与流媒体没有任何关系。它只是关于"print this number " + boost::lexical_cast<std::string>(5) + ". ""print this number " + "5" + ". "的有效性。

第一部作品的原因是第二部分是std::string,而不是字符串文字。运算符+用于将std::string连接在一起或用于串联对象和字符串文字(C风格字符串)的混合,但不适用于纯C风格的字符串,如第二个表达式中那样。