Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于std::cout,为什么使用;“外部”;比;“单件模式”; 我读了有效的C++ 04项提到的_C++_Iostream_Effective C++ - Fatal编程技术网

关于std::cout,为什么使用;“外部”;比;“单件模式”; 我读了有效的C++ 04项提到的

关于std::cout,为什么使用;“外部”;比;“单件模式”; 我读了有效的C++ 04项提到的,c++,iostream,effective-c++,C++,Iostream,Effective C++,通过使用局部静态对象重新放置非局部静态对象,避免跨转换单元的初始化顺序问题 我认为“全局且只有一个对象”应该是singleton模式,而不是读过这篇文章后的extern对象 例如I/O对象(std::cout) 但是std::cout似乎是外部对象。 () 我对此感到困惑 编辑:添加代码 我从这本书中捕获了一些代码 首先是坏代码: 类文件系统{ //从库的头文件 公众: …std::size\u t numDisks()常量; //许多成员函数之一。。。 }; 外部文件系统tfs; 未定义在

通过使用局部静态对象重新放置非局部静态对象,避免跨转换单元的初始化顺序问题

我认为“全局且只有一个对象”应该是singleton模式,而不是读过这篇文章后的extern对象

例如I/O对象(std::cout)

但是std::cout似乎是外部对象。 ()

我对此感到困惑

编辑:添加代码 我从这本书中捕获了一些代码

首先是坏代码:

类文件系统{
//从库的头文件
公众:
…std::size\u t numDisks()常量;
//许多成员函数之一。。。
}; 
外部文件系统tfs;
未定义在不同转换单元中定义的非局部静态对象的初始化相对顺序

所以当我调用tfs时,上面提到的代码可能是错误的

因为tfs可能无法完成初始化

推荐代码:

class FileSystem { ... }; // as before
FileSystem& tfs()
{
  static FileSystem fs;
  return fs;
}
class Directory { ... };// as beforeDirectory::Directory( params )
Directory::Directory( params ) // as before, except references to tfs are 
                               //now to tfs( )
{
...
std::size_t disks = tfs().numDisks( );
...
}
Directory& tempDir()
{
  static Directory td(params);
  return td;
}

使用
extern
变量允许(主观上)更好的语法

std::cout << stuff;

std::cout使用
extern
变量允许(主观上)更好的

std::cout << stuff;

<代码> STD::CUT

,因为C++选择了更精细的方法,获得了直接对象访问的效率和简单性,并且仍然避免了静态初始化顺序FASCO。 怎么做

< > C++标准流实际上不是静态初始化的。而是,包含了定义全局引用计数的全局静态对象,并用它初始化C++流。
<>或者至少,这是如何指定的,但是总是存在.< /p>< P>,因为C++选择了更精细的方法,获得了直接对象访问的效率和简单性,并且仍然避免了静态初始化顺序FASCO。 怎么做

< > C++标准流实际上不是静态初始化的。而是,包含了定义全局引用计数的全局静态对象,并用它初始化C++流。
< C++ >是因为它是如何指定的,但是总是有.< /p>,因为C++是在C之后建模的,它有全局代码> STDIN < /C> > />代码> STDUD> <代码> >代码> STRDER 变量。相关的阅读:因为C++是在c之后建模的,它有全局代码> STDIN <代码> >代码> STDUD> <代码> >代码> STRDER 变量。为什么使用“SULTLITON”当您可以使用“ExtLN”BTW时,初始化命令问题几乎不会发生(<代码> STD::CUT)。关键字看起来像“Schwarz Counter”谢谢!关键字看起来像“Schwarz计数器”