C ++指针查询

时间:2014-04-21 04:28:14

标签: c++ pointers static typedef

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

我有一个Utils课程,其中static ofstream名为theLog我有另一个课程Work使用Utils::theLog。这是相关的代码:

Utils.h

#ifndef UTILS_H
#define UTILS_H

// includes

class Utils {
public:
  static ofstream theLog;

  // other code 
}
#endif

Work.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时,如{:1}}中出现编译错误。我假设原因是运营商l << "Hello, world!\n";优先于<<,即使*属于l类型,也被定义为指向pOfStream对象的指针,但代码未隐式写入ofstream

我的问题是,有没有办法使用提取运算符*l << "Hello, world!\n";而不必用括号和星号括起指针?此外,当您定义类似上述<<的类型,然后将变量pOfStream分配给类型var时,编译器是否只读取代码并替换pOfStream的任何实例} pOfStream

我一直在搜索SO和Google的答案,但我不确定如何说出这个问题。

1 个答案:

答案 0 :(得分:4)

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

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

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