C++ 指针查询

标签 c++ pointers static typedef

所以我一直在玩弄静态、指针和类型定义,但我遇到了一堵砖墙,想知道是否有人可以提供一些见解。

我有一个类Utilsstatic ofstream称为 theLog我还有另一个类 Work利用 Utils::theLog .这是相关代码:

实用工具.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";我收到编译器错误。我假设原因是运算符(operator) <<优先于 * , 即使 l类型为 pOfStream ,它被定义为指向 ofstream 的指针对象,但代码并未隐式写入 *l << "Hello, world!\n"; .

我的问题是,有没有办法使用提取运算符 <<不必用括号和星号包围指针?同样,当您定义上述类型时 pOfStream然后分配一个变量 var到类型 pOfStream ,编译器是否只是通读代码并替换 pOfStream 的任何实例?与 ofstream*

我一直在搜索 SO 和 Google 寻找答案,但我不太确定如何表述这个问题。

最佳答案

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

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

这样就不用用指针了。

关于C++ 指针查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23190812/

相关文章:

类型转换空指针

c - 堆和栈段

javascript - 仅从 Express 静态目录提供 .js 文件?

c++ - 使用 std::remove_reference 获取 STL 容器的元素迭代器

c++ - 模板特化和从其他模板类继承模板类

c - 在 c 中为队列推送中的临时分配内存时出错,来自 valgrind 的写入大小为 8 无效

c++ - 动态分配一个全局数组,该数组位于动态分配的结构数组中

c++ - 如何对多种类型进行一种显式特化?

c++ - Qt 接口(interface)或抽象类和 qobject_cast()

静态数组的正确大小