21xrx.com
2024-09-20 05:19:18 Friday
登录
文章检索 我的文章 写文章
C++中的三个点是什么?
2023-07-03 17:08:31 深夜i     --     --
C++ three dots ellipsis

在C++编程语言中,有一个特殊的运算符,就是三个点(...)。这个运算符被称为省略符号(ellipsis operator),也叫做可变参数(variadic)函数。

那么,省略符号在C++中具体有哪些用途呢?以下是三种常见的使用场景:

1. 可变参数函数

可变参数函数是指能够接受任意数量的参数的函数。使用省略符号定义函数参数列表,就可以实现可变参数函数。例如:


void my_printf(char* fmt, ...)

{

  va_list args;

  va_start(args, fmt);

  while (*fmt != '\0') {

    if (*fmt == 'd') {

      int i = va_arg(args, int);

      printf("%d\n", i);

    } else if (*fmt == 'f') {

      double d = va_arg(args, double);

      printf("%f\n", d);

    } else if (*fmt == 's') {

      char* s = va_arg(args, char*);

      printf("%s\n", s);

    }

    fmt++;

  }

  va_end(args);

}

上面的代码定义了一个名叫my_printf的函数,可以输出任意数量的数字和字符串。通过省略符号,可以在函数内部使用一个可变参数列表,即args。在函数体内部,可以使用va_start和va_arg两个API来解析可变参数列表中的值。

2. 定义变长数组

C++11之后的新特性中,允许使用省略符号定义变长数组。例如:


int sum(std::initializer_list<int> nums)

{

  int result = 0;

  for (auto it = nums.begin(); it != nums.end(); ++it) {

    result += *it;

  }

  return result;

}

int main()

{

  int s = sum( 3); // 可以传递任意数量的参数

  return 0;

}

上面的代码中,定义了一个sum函数,使用initializer_list和省略符号作为参数列表,可以接受任意数量的整数。在main函数中,可以调用sum函数并传递1、2、3三个数字,函数内部会计算它们的和并返回。

3. 定义可变参数模板

C++11之后的新特性中,可以定义可变参数模板,实现类似于可变参数函数的效果。例如:


template<typename... Args>

void logger(Args... args)

{

  std::ostringstream stream;

  print_to_stream(stream, args...); // 调用可变参数的函数

  std::string msg = stream.str();

  write_to_file(msg); // 将消息写入文件

}

上面的代码中,定义了一个logger函数,使用省略符号作为模板参数列表,可以接受任意数量的参数。在函数体内部,可以调用其他可变参数的函数,例如print_to_stream,将参数输出到字符串流中,并最终将消息写入文件。

总之,省略符号是C++中非常常见的功能,通常用于编写可变参数函数、变长数组和可变参数模板。如果您正在学习C++,务必要充分理解省略符号的相关用法,这对提高编程效率和编写更灵活的代码非常有帮助。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复