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

mzmfm0qo  于 2023-02-06  发布在  其他
关注(0)|答案(3)|浏览(266)

我想用cout在C++中创建一个函数,它和java中的println函数有相同的功能,这意味着调用应该是这样的:

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

变量a应该有任何基本类型。2在这种情况下我应该有什么样的参数?3它是如何工作的?
谢谢

gopyfrb3

gopyfrb31#

正如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,我猜这个库会做你想做的事情。

gblwokeq

gblwokeq2#

许多人投了反对票,但这并不能解释为什么你的要求是不正确的。
你有两个选择:
1.你可以创建一个模板化的println(T val)函数,它可以接受你喜欢的任何类型,int,double等等,你可以在这个函数中打印它们。
1.不过,你在上面的要求是:这是一个返回类型的表达式,你在这里要做的是添加一个const char*和一个int,不幸的是,这不会像你期望的那样,它会做pointer arithmetic,在这个特殊的例子中甚至不会编译,但是对于一般的例子,比如一个std::string和一个叫做Foo的类,编译器将寻找能够连接这两个事物的operator+ overload
第二个选择,也是稍微危险一点的选择,是使用一个println函数,该函数接受一个std::stringconst char*,并定义所有不同的operator+运算,但我不推荐这样做,因为指针和整数之间的默认运算是指针算术,这是非常有用的。
我建议从一个模板函数开始,然后看看会发生什么。

egmofgnx

egmofgnx3#

10年后的C++23标准库中有了println function

#include <print>

int main()
{
    int i = 5;

    std::println("Hello, World {}!", i);

    return 0;
}

由于C++23是相当新的,目前很难找到编译器支持。

相关问题