C++指针查询

C++ Pointer Inquiry

本文关键字:查询 指针 C++      更新时间:2023-10-16

所以我一直在摆弄静态、指针和typedef,我遇到了一堵砖墙,想知道是否有人能提供一些见解。

我有一个类Utils和一个称为theLogstatic ofstream,我有另一个使用Utils::theLog的类Work。以下是相关代码:

Utils.h

#ifndef UTILS_H
#define UTILS_H
// includes
class Utils {
public:
  static ofstream theLog;
  // other code 
}
#endif

工作.cpp

 // includes
typedef ofstream* pOfStream;
static pOfStream l = &(Utils::theLog); // l is a lowercase L
// constructor and destructor
void Work::doSomeWork() {
    (*l) << "Hello, world!n";
}
// other code

这会编译并且不会产生运行时错误。然而,定义pOfStream的原因是为了避免用星号、括号和Utils::theLog填充我的代码。当我尝试用l替换(*l)时,如:l << "Hello, world!n";中所示,我会遇到编译器错误。我假设原因是运算符<<优先于*,尽管l的类型是pOfStream,它被定义为指向ofstream对象的指针,但代码并不是隐式编写的*l << "Hello, world!n";

我的问题是,有没有一种方法可以使用提取运算符<<,而不必用括号和星号包围指针?此外,当您定义一个类似于上述pOfStream的类型,然后将变量var分配给类型pOfStream时,编译器是否只是通读代码并将pOfStream的任何实例替换为ofstream*

我一直在SO和谷歌上搜索答案,但我不确定该如何表达这个问题。

为什么不直接引用流,比如

ostream &l = Utils::theLog;
l << "Hello, World!n";

通过这种方式,您不必使用指针。