Tutorial by Examples: p

You can overload the 2 unary operators: ++foo and foo++ --foo and foo-- Overloading is the same for both types (++ and --). Scroll down for explanation Overloading outside of class/struct: //Prefix operator ++foo T& operator++(T& lhs) { //Perform addition return lhs; } ...
You can overload all comparison operators: == and != > and < >= and <= The recommended way to overload all those operators is by implementing only 2 operators (== and <) and then using those to define the rest. Scroll down for explanation Overloading outside of class/struct: ...
You can overload type operators, so that your type can be implicitly converted into the specified type. The conversion operator must be defined in a class/struct: operator T() const { /* return something */ } Note: the operator is const to allow const objects to be converted. Example: struct ...
You can even overload the array subscript operator []. You should always (99.98% of the time) implement 2 versions, a const and a not-const version, because if the object is const, it should not be able to modify the object returned by []. The arguments are passed by const& instead of by value...
You can overload the function call operator (): Overloading must be done inside of a class/struct: //R -> Return type //Types -> any different type R operator()(Type name, Type2 name2, ...) { //Do something //return something } //Use it like this (R is return type, a and b a...
The assignment operator is one of the most important operators because it allows you to change the status of a variable. If you do not overload the assigment operator for your class/struct, it is automatically generated by the compiler: the automatically-generated assignment operator performs a &qu...
Overloading the bitwise NOT (~) is fairly simple. Scroll down for explanation Overloading outside of class/struct: T operator~(T lhs) { //Do operation return lhs; } Overloading inside of class/struct: T operator~() { T t(*this); //Do operation return t; } Note...
The operators << and >> are commonly used as "write" and "read" operators: std::ostream overloads << to write variables to the underlying stream (example: std::cout) std::istream overloads >> to read from the underlying stream to a variable (example: s...
Using the following code with the format string yyyy/MM/dd hh:mm.ss, we will receive the following output 2016/04/19 11:45.36 // define the format to use String formatString = "yyyy/MM/dd hh:mm.ss"; // get a current date object Date date = Calendar.getInstance().getTime(); //...
Bosun alerts are defined in the config file using a custom DSL. They use functions to evaluate time series data and will generate alerts when the warn or crit expressions are non-zero. Alerts use templates to include additional information in the notifications, which are usually an email message and...
This method can be used to convert a formatted string representation of a date into a Date object. /** * Parses the date using the given format. * * @param formattedDate the formatted date string * @param dateFormat the date format which was used to create the string. ...
An assertion is a statement used to assert that a fact must be true when that line of code is reached. Assertions are useful for ensuring that expected conditions are met. When the condition passed to an assertion is true, there is no action. The behavior on false conditions depends on compiler fl...
To find files, use the -type f flag $ find . -type f To find directories, use the -type d flag $ find . -type d To find block devices, use the -type b flag $ find /dev -type b To find symlinks, use the -type l flag $ find . -type l
The Promise.resolve static method can be used to wrap values into promises. let resolved = Promise.resolve(2); resolved.then(value => { // immediately invoked // value === 2 }); If value is already a promise, Promise.resolve simply recasts it. let one = new Promise(resolve => ...
#include <stdio.h> #define is_const_int(x) _Generic((&x), \ const int *: "a const int", \ int *: "a non-const int", \ default: "of other type") int main(void) { const int i = 1; int j = 1; double...
#include <stdio.h> void print_int(int x) { printf("int: %d\n", x); } void print_dbl(double x) { printf("double: %g\n", x); } void print_default() { puts("unknown argument"); } #define print(X) _Generic((X), \ int: print_int, \ double: pri...
A lambda expression provides a concise way to create simple function objects. A lambda expression is a prvalue whose result object is called closure object, which behaves like a function object. The name 'lambda expression' originates from lambda calculus, which is a mathematical formalism invented...
For lambdas with a single return statement, or multiple return statements whose expressions are of the same type, the compiler can deduce the return type: // Returns bool, because "value > 10" is a comparison which yields a Boolean result auto l = [](int value) { return value &gt...
If you specify the variable's name in the capture list, the lambda will capture it by value. This means that the generated closure type for the lambda stores a copy of the variable. This also requires that the variable's type be copy-constructible: int a = 0; [a]() { return a; // Ok, 'a' ...
Tuples group multiple values into a single compound value. The values within a tuple can be of any type and do not have to be of the same type as each other. Tuples are created by grouping any amount of values: let tuple = ("one", 2, "three") // Values are read using index n...

Page 31 of 691