Does the C++ standard allow for an uninitialized bool to crash a program?

Yes, ISO C++ allows (but doesn’t require) implementations to make this choice. But also note that ISO C++ allows a compiler to emit code that crashes on purpose (e.g. with an illegal instruction) if the program encounters UB, e.g. as a way to help you find errors. (Or because it’s a DeathStation 9000. Being strictly … Read more

How do I execute a command and get the output of the command within C++ using POSIX?

#include <cstdio> #include <iostream> #include <memory> #include <stdexcept> #include <string> #include <array> std::string exec(const char* cmd) { std::array<char, 128> buffer; std::string result; std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, “r”), pclose); if (!pipe) { throw std::runtime_error(“popen() failed!”); } while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) { result += buffer.data(); } return result; } Pre-C++11 version: #include <iostream> #include <stdexcept> #include … Read more

Convert char to int in C and C++

Depends on what you want to do: to read the value as an ascii code, you can write char a=”a”; int ia = (int)a; /* note that the int cast is not necessary — int ia = a would suffice */ to convert the character ‘0’ -> 0, ‘1’ -> 1, etc, you can write … Read more

How do you clear a stringstream variable?

For all the standard library types the member function empty() is a query, not a command, i.e. it means “are you empty?” not “please throw away your contents”. The clear() member function is inherited from ios and is used to clear the error state of the stream, e.g. if a file stream has the error … Read more

std::string formatting like sprintf

Modern C++ makes this super simple. C++20 C++20 introduces std::format, which allows you to do exactly that. It uses replacement fields similar to those in python: #include <iostream> #include <format> int main() { std::cout << std::format(“Hello {}!\n”, “world”); } Code from cppreference.com, CC BY-SA and GFDL Check out the compiler support page to see if it’s … Read more

When to use reinterpret_cast?

The C++ standard guarantees the following: static_casting a pointer to and from void* preserves the address. That is, in the following, a, b and c all point to the same address: int* a = new int(); void* b = static_cast<void*>(a); int* c = static_cast<int*>(b); reinterpret_cast only guarantees that if you cast a pointer to a … Read more