4

我已经了解到

inline ostream & _Cdecl ostream::operator<< (const signed char * _s) {
    outstr(_s, (const signed char *)0);
    return *this;
}

是如何在 iostream.h 头文件中声明(重载)插入运算符 (<<)。我可以使用相同的函数在屏幕上打印字符串值吗?

我试过了

#include<iostream.h>
int main() {
    outstr("Hello world!", (const signed char *)0);
    return 0;
}

结果出错了。我想使用这样的东西来看看是否有一些可能的方法来回答这个在屏幕上打印某些东西的查询,而不使用 printf、cout 或 puts()。

更新:如果您有任何建议,我会很欢迎

#include<stdlib.h>
void main() {
    system("echo /"Hello world!/"");
}

注意:如果您可以提供无需 printf()、cout 或 puts() 即可打印的 C 等效代码,我没有任何限制

4

5 回答 5

4

是的,您可以直接调用该函数,但是您这样做的理由是有缺陷的。与执行实际功能所花费的时间相比,通过消除对操作员的子程序调用所节省的时间可以忽略不计;这就像在活动车顶关闭时关闭车窗以减少雨水一样。

于 2012-12-03T17:30:50.967 回答
3

如果您希望在所有符合标准的 C++ 实现中具有可移植性,您可以通过以下方式将字符串打印到标准输出

const char * str = "Hello World\n";
fprintf(stdout, str);
fputs(str, stdout);
for (int i=0; str[i]!=0; ++i)
    putchar(str[i]);
for (int i=0; str[i]!=0; ++i)
    putc(str[i], stdout);
for (int i=0; str[i]!=0; ++i)
    fputc(str[i], stdout);
fwrite(str, sizeof(*str), strlen(str), stdout);

此外,您可以使用std::cerrstd::clog。他们写信stderr而不是stdout,但从用户的角度来看,这通常是同一个地方:

std::cerr << str;
std::clog << str;

从效率的角度来看,我怀疑这些中的任何一个都会对您有所帮助。为此,您可能希望查看一些更特定于平台的东西。对于 POSIX 系统,请参阅Dave S给出的答案。对于 Windows,请参阅此链接

你不应该做的是打开你的头文件并模仿他们使用的东西。至少,不是在中间级别,他们在自己的实现中使用不同的各种晦涩功能。这些功能在下一个版本中可能不存在。但是,如果您深入到最深层次,您会发现操作系统特定的调用,就像我上面提供的链接中的调用一样。只要您使用相同的操作系统,甚至在操作系统版本之间,这些都应该是安全的。

于 2012-12-03T18:08:17.973 回答
3

进行函数调用所需的时间比打印字符串所需的时间得多。您可以(通常应该)忽略您的方法可能节省的时间。

于 2012-12-03T17:32:43.157 回答
2

在 UNIX 类型系统上,您可以执行以下操作。

#include <unistd.h>
#include <stdio.h>

int main()
  {
  const char x[] = "Hello World!";
  write(STDOUT_FILENO, x, strlen(x)); // Feel free to check the return value.
  return 0;
  }

我很好奇你这样做的动机是什么。在信号处理程序之外,我不愿意像这样进行较低级别的调用。I/O 的性能将是时间的主要驱动因素,而不是通常经过大量优化/内联的中间函数调用。

于 2012-12-03T18:20:55.867 回答
0

您可以直接使用系统调用。

http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html

例如,这个页面解释了 linux 系统调用。您可以从我复制的链接开始,并使用汇编来使用许多方法,或者换句话说,不调用它的函数来做某事。

但我猜这是一个棘手的问题,如果我有一家公司,我永远不会雇佣一个使用系统调用而不是函数的人。

这是将 sys_write(4) 与标准输出 (1) 结合使用的示例。您可以将汇编代码内联到您的 C/C++ 代码中。 http://docs.cs.up.ac.za/programming/asm/derick_tut/#helloworld

于 2012-12-03T18:06:52.433 回答