Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object instantiation with curly braces and : symbols

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
like image 895
EmmanuelT Avatar asked Jan 06 '20 21:01

EmmanuelT


People also ask

When to use brace initialization in C++?

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.

What are the different ways of instantiating an object in Java?

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.

How do I use brace initialization in Python?

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 };

What is prototypal instantiation pattern for object creation?

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.


1 Answers

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

like image 179
NathanOliver Avatar answered Sep 21 '22 10:09

NathanOliver