C ++中的System.out.println函数语法

时间:2013-04-18 13:31:32

标签: java c++ println

我想使用cout在C ++中创建一个与java中的println函数相同的函数。这意味着调用应该是这样的:

int a=5
println("A string" + a);

变量a应该具有任何基本类型。 在这种情况下我应该具有什么样的参数以及它将如何工作?

由于

2 个答案:

答案 0 :(得分:6)

正如larsmans已经指出的那样,java在运算符+上有重载。所以你可以用整数来连接字符串。这在C ++中也是可能的,但对于所有类型都不是开箱即用的。

你可以使用像这样的模板化函数。

#include <iostream>
using namespace std;

template <typename T>
void printer(T t) 
{ 
    cout << t << endl;
}

template <typename T, typename ...U>
void printer(T t, U ...u)
{
  cout << t;
  printer(u...);
}


int main()
{
  int a=5;
  printer("A string ", a);
  return 0;
}

但我建议你看看boost::format。我想这个库会做你想要的。

答案 1 :(得分:2)

许多人都在贬低,但这并不能解释为什么你提出的问题不正确。

你有两个选择:

  1. 你可以制作一个模板println(T val)函数,它可以采用你喜欢的任何类型,整数,双精度等,你可以在那个函数中打印它们。

  2. 但是,您要求的是:"A string" + a这是一个返回类型的表达式。你在这里做的是添加const char*int。遗憾的是,这不会像你期望的那样做,它会做pointer arithmetic,在这种特殊情况下甚至不会编译。但是对于一般情况,例如std::string和一个名为Foo的类,编译器将寻找可以连接这两个东西的operator+ overload

    您的第二个选项,但更危险一点,就是拥有一个println函数,该函数可以使用std::stringconst char*并定义您可能需要的所有不同的运算符+运算。我不建议这样做,因为指针和整数之间的默认操作是做指针算术,这非常有用。

  3. 我建议从模板功能开始,看看从那里发生了什么。