Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/io/clog"

From cppreference.com
< cpp‎ | io
(+)
 
m (fmt, http -> https)
 
(15 intermediate revisions by 7 users not shown)
Line 1: Line 1:
 
{{cpp/title|clog|wclog}}
 
{{cpp/title|clog|wclog}}
{{cpp/io/basic_ostream/sidebar}}
+
{{cpp/io/basic_ostream/navbar}}
{{ddcl list begin}}
+
{{dcl begin}}
{{ddcl list header | iostream }}
+
{{dcl header|iostream}}
{{ddcl list item | num=1 | 1=
+
{{dcl|num=1|1=
 
extern std::ostream clog;
 
extern std::ostream clog;
 
}}
 
}}
{{ddcl list item | num=2| 1=
+
{{dcl|num=2|1=
 
extern std::wostream wclog;
 
extern std::wostream wclog;
 
}}
 
}}
{{ddcl list end}}
+
{{dcl end}}
  
The global objects {{cpp|std::clog}} and {{cpp|std::wclog}} control output to a stream buffer of implementation-defined type (derived from {{cpp|std::streambuf}}), associated with the standard C output stream {{cpp|stderr}}, but, unlike {{cpp|std::cerr}}/{{cpp|std::wcerr}}, these streams are not automatically flushed and not automatically tie()'d with cout.
+
The global objects {{tt|std::clog}} and {{tt|std::wclog}} control output to a stream buffer of implementation-defined type (derived from {{lc|std::streambuf}}), associated with the standard C output stream {{lc|stderr}}, but, unlike {{lc|std::cerr}}/{{lc|std::wcerr}}, these streams are not automatically flushed and cout is not automatically tie()'d with these streams.
  
These objects are guaranteed to be constructed before the first constructor of a static object is called and they are guaranteed to outlive the last destructor of a static object, so that it is always possible to write to {{cpp|std::clog}} in user code.
+
These objects are guaranteed to be initialized during or before the first time an object of type {{lc|std::ios_base::Init}} is constructed and are available for use in the constructors and destructors of static objects with [[cpp/language/initialization#Non-local_variables|ordered initialization]] (as long as {{header|iostream}} is included before the object is defined).
  
Unless {{cpp|sync_with_stdio(false)}} has been issued, it is safe to concurrently access these objects from multiple threads for both formatted and unformatted output.
+
Unless {{c|std::ios_base::sync_with_stdio(false)}} has been issued, it is safe to concurrently access these objects from multiple threads for both formatted and unformatted output.
 +
 
 +
===Notes===
 +
The 'c' in the name refers to "character" ([https://www.stroustrup.com/bs_faq2.html#cout stroustrup.com FAQ]); {{tt|clog}} means "character log" and {{tt|wclog}} means "wide character log".
  
 
===Example===
 
===Example===
{{example cpp
+
{{example
| code=
+
|code=
 
#include <iostream>
 
#include <iostream>
struct Foo {
+
 
 +
struct Foo
 +
{
 
     int n;
 
     int n;
     Foo() {
+
     Foo()
      std::clog << "static constructor\n";
+
    {
 +
        std::clog << "static constructor\n";
 
     }
 
     }
     ~Foo() {
+
     ~Foo()
      std::clog << "static destructor\n";
+
    {
 +
        std::clog << "static destructor\n";
 
     }
 
     }
 
};
 
};
 +
 
Foo f; // static object
 
Foo f; // static object
 +
 
int main()
 
int main()
 
{
 
{
 
     std::clog << "main function\n";
 
     std::clog << "main function\n";
 
}
 
}
| output=
+
|output=
 
static constructor
 
static constructor
 
main function
 
main function
Line 42: Line 51:
  
 
===See also===
 
===See also===
{{dcl list begin}}
+
{{dsc begin}}
{{dcl list template | cpp/io/ios_base/dcl list Init}}
+
{{dsc inc|cpp/io/ios_base/dsc Init}}
{{dcl list end}}
+
{{dsc inc|cpp/io/dsc cerr}}
 +
{{dsc inc|cpp/io/dsc cout}}
 +
{{dsc inc|cpp/io/c/dsc std streams}}
 +
{{dsc end}}
 +
 
 +
{{langlinks|de|es|fr|it|ja|pt|ru|zh}}

Latest revision as of 11:37, 11 September 2023

 
 
 
 
Defined in header <iostream>
extern std::ostream clog;
(1)
extern std::wostream wclog;
(2)

The global objects std::clog and std::wclog control output to a stream buffer of implementation-defined type (derived from std::streambuf), associated with the standard C output stream stderr, but, unlike std::cerr/std::wcerr, these streams are not automatically flushed and cout is not automatically tie()'d with these streams.

These objects are guaranteed to be initialized during or before the first time an object of type std::ios_base::Init is constructed and are available for use in the constructors and destructors of static objects with ordered initialization (as long as <iostream> is included before the object is defined).

Unless std::ios_base::sync_with_stdio(false) has been issued, it is safe to concurrently access these objects from multiple threads for both formatted and unformatted output.

[edit] Notes

The 'c' in the name refers to "character" (stroustrup.com FAQ); clog means "character log" and wclog means "wide character log".

[edit] Example

#include <iostream>
 
struct Foo
{
    int n;
    Foo()
    {
        std::clog << "static constructor\n";
    }
    ~Foo()
    {
        std::clog << "static destructor\n";
    }
};
 
Foo f; // static object
 
int main()
{
    std::clog << "main function\n";
}

Output:

static constructor
main function
static destructor

[edit] See also

initializes standard stream objects
(public member class of std::ios_base) [edit]
writes to the standard C error stream stderr, unbuffered
(global object)[edit]
writes to the standard C output stream stdout
(global object)[edit]
expression of type FILE* associated with the input stream
expression of type FILE* associated with the output stream
expression of type FILE* associated with the error output stream
(macro constant) [edit]