Can you please explain the following object instantiation ? How it is called ?
Where can I find more information about this kind of object instantiation ?
#include <string>
#include <iostream>
using namespace std;
class Car {
public:
string name;
int wheels;
};
int main() {
Car c{
name: "vw",
wheels: 4
};
return 0;
}
I am using GCC with the following options:
$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.4.0-1ubuntu1~18.04.1' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1
You can use brace initialization anywhere you would typically do initialization—for example, as a function parameter or a return value, or with the new keyword: In /std:c++17 mode, the rules for empty brace initialization are slightly more restrictive. See Derived constructors and extended aggregate initialization.
There are three different ways of instantiating an object through constructors: Through Default constructors. Through Parameterized constructors. Through Copy constructors. 1. Through Default Constructor: An object can be instantiated through a default constructor in either static way or dynamic way.
You can use brace initialization anywhere you would typically do initialization—for example, as a function parameter or a return value, or with the newkeyword: class_d* cf = new class_d{4.5}; kr->add_d({ 4.5 }); return { 4.5 };
The prototypal instantiation pattern for object creation uses Object.create () to create a new object, allowing it access to the prototypal chain, thus allowing new instances of the object access to the object’s methods each time the function is called. During method creation (lines 91–104), the prototype property of animal is used.
This is called designated initializers, but it is using an obsolete syntax1. This is a C feature that C++ partially implemented in C++20.
What
name: "vw"
means in this context is initialize the member name
with the value "vw"
. The non obsolete version of the code would be
Car c{
.name = "vw",
.wheels = 4
};
GCC will also allow you to use the C version of designated initializers which is "more powerful" as an extension to the language.
1 see: GCC 6.29 Designated Initializers
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With