Cpp Memo part 5 -- Conditionals
Repost: Speed Up Git (5x to 50x)

Designated Initializer & C++

tubo posted @ 2014年10月13日 17:19 in 未分类 , 1465 阅读

Sadly, C++ does not support designated initializer which is a C99 standard….

Two Core C99 Features that C++11 Lacks

Last updated Jan 1, 2003.

It's too late now to make changes to the C++11 FDIS, and yet it's still worth looking at two core-language features that were added to C99 and never made it into C++.


restrict Pointers

The C99 keyword restrict is a pointer qualifier. It means that for the lifetime of the qualified pointer, only it or a value directly derived from it (such as p+1, *p etc.) will be used to access the object to which it points. Such a guarantee about a given pointer enables certain caching optimizations and minimizes the effects of pointer aliasing. The following example demonstrates this:

            void update(int *p1, int *p2, int *val)
            ,*p1 += *val;
            ,*p2 += *val;

The three pointer arguments aren't restrict-qualified. Therefore, the compiler has to assume that they might refer to the same memory location. Consequently, it will be forced to generate less optimal code. By contrast, if the programmer applies restrict to each of the three pointer arguments, as in:

            void update(int * restrict p1, int * restrict p2, int * restrict val) //C99 only
            ,*p1 += *val;
            ,*p2 += *val;


the compiler can assume that p1, p2 and val point to different locations, and updating one pointer will not affect any other pointer. Under this assumption, the compiler can optimize the generated code.

restrict has been around since 1999, and possibly earlier when the first C99 drafts started circulating. Some of the committee members I've spoken to agree that from their experience, restrict can improve performance quite noticeably. In fact, I believe that there's a consensus about restrict's performance benefits, after more than 10 years of real-world experience. And yet, C++ doesn't support restrict pointers. No one has come up with a convincing argument against restrict in C++. I can only assume that C++ lacks this feature for the wrong reasons: lack of interest, lack of time and maybe some tug of wars between the C and C++ standards committees (to be fair, there's much better collaboration between the two committees today. It wasn't always the case, though).

On a practical note, adding restrict to C++ would require additional research and testing. Should it apply to references as well? Should it apply to both lvalue references and rvalue references? How does restrict interact with concurrency-related features and the new memory model of C+11? I doubt that anyone has had the time to explore these issues yet because the current specification of C++11 rvalue references was finalized very lately. However, it might be a good idea to consider it, at least for the next C++ standard.

Designated Initializers

One of the most convenient core-language features of C99 is called designated initializers. They let you initialize aggregates (structs, unions and arrays) partially, specifying only the members/elements that you want initialized, while skipping the rest (these are default initialized). Consider:

            struct S //C99 only
            int a;
            int b;
            int c;
        } q = { .a = 99, .c = 100 };


The braces include designated initializers for the data member a and c. Since b has no explicit initializer, it's zero-initialized implicitly. Notice that unlike class member initializers in C++, designated initializers let you specify ad-hoc initializers for a given object. A different instance of the same struct might use different initializers:

        struct S r={.a=5}; //C99, b and c are zero initialized


Similarly, you can use the same technique to initialize a union:

            union U//C99 only
            int a;
            double d;
            char * c;
        } t = { .c =NULL};


You initialize arrays like this:

        int arr[4] = { [2] = 3, [1] = 9 };//C99 only


The elements arr[2] and arr[1] are initialized to 3 and 9, respectively. The remaining elements are zero-initialized.

Designated Initializers and C++

Sadly, designated initializers didn't make it into C++11 either. Again, I can't think of a good reason for that. This issue has been raised several times on the committee's reflectors (list servers) and has either been greeted with cynicism or completely ignored.

One could argue -- as some have -- that C++ doesn't need this feature because it rarely uses POD aggregates. Instead of POD structs you'd normally use a class with proper constructors, and instead of arrays you'd better use std::vector and std::array. This may be true to some extent but there are at least three reasons for supporting designated initializers in C++ in spite of that:

Computability with C. Like it or not, C is a very popular programming language these days and it will surely remain so in the foreseeable future. The lack of support for designated initializers in C++ breaks compatibility with C programs that use this feature.

Public data members are coming out of the closet. We may have lulled ourselves into thinking that public data members are a faux pas, but Koenig's seminal article proved us wrong in this respect. If public data members are allowed in some circumstances, maybe we should permit designated initializers for them too.

Designated Initializers

C99 is old news. The new C standard, C1x, brings even more new features that C++11 won't support. Letting the gaping chasms between the two languages expand is a strategic mistake. The efforts needed to make C++ more compatible with C are minimal -- just a few months of work. By contrast, the damage of the growing incompatibility between the two languages is significant:

Breaking compatibility. As I've explained above, the assumption that C++ is a superset of C and that every C program is a valid C++ program (with perhaps minimal adjustments) is gradually becoming tapering down.

Dialectal splits. When the C++ standards committee drags its feet, compiler vendors take the initiative, adding support for non-standard extensions, e.g., C99 features, to their C++ compilers. Consequently, you end up having different dialects of C++ -- one dialect per implementation.

Denial. C++ users can pretend that the aforementioned C99 aren't needed or useful in C++. That isn't the case. The fact is that these features could prove at least as useful in C++ as they are in C.


Gabriella Bromby 说:
2019年6月02日 23:50

The C++ is the computer language which is very useful in the system file and the device of many frames. The site is for the designation of https://topamericanwriters.com/ the writer with the two cores C99 with the initializing of the C plus language startup.

bruin login 说:
2022年8月19日 08:48

Secondary Education Core | Bellevue University 2021. Bellevue teachers vote to pause expansion of in-person learning 2021. bruin login Parents grow frustrated with Bellevue teachers meeting over. Parents grow frustrated with Bellevue teachers meeting over 2021

Haryana Board 3rd Cl 说:
2022年9月02日 20:34

Haryana Board Model Paper 2023 Class 3 Pdf Download with Answers for English Medium, Hindi Medium, Urdu Medium & Students for Small Answers, Long Answer, Very Long Answer Questions, and Essay Type Questions to Term1 & Term2 Exams at official website. Haryana Board 3rd Class Model Paper New Exam Scheme or Question Pattern for Sammittive Assignment Exams (SA1 & SA2): Very Long Answer (VLA), Long Answer (LA), Small Answer (SA), Very Small Answer (VSA), Single Answer, Multiple Choice and etc.

Alyssa 说:
2023年1月01日 21:12

"In C++, a designated initializer is a non-static member function that is invoked automatically when an object of that class is created. The purpose of a designated initializer is to cbd products initialize the members of the object in a specific order, as opposed to the order in which they are declared in the class. A designated initializer is declared using the same syntax as a regular member function, but with the keyword ""designated"" before the function name. For example: class MyClass { public: MyClass() : x(0), y(0) {} // Default constructor MyClass(int x, int y) : x(x), y(y) {} // Designated initial "

meidir 说:
2023年5月22日 06:30

Good day. Very cool blog!! Man .. Excellent .. Amazing .. I’ll bookmark your website and take the feeds additionally…I am glad to locate numerous useful info right here within the post. Thank you for sharing.. Buy Original MRCP (UK) certificate without exam

meidir 说:
2023年5月24日 23:20

I’m not sure where you’re getting your info, but great topic. I needs to spend some time learning much more or understanding more. Thanks for excellent information I was looking for this information for my mission. Hobart mortgage broker






Some really select articles on this internet site , bookmarked . practice management software






Hey, you used to write excellent, but the last few posts have been kinda boring¡K I miss your super writings. Past few posts are just a little out of track! come on! aged care






It’s really a cool and useful piece of information. I’m glad that you shared this useful information with us. Please keep us informed like this. Thanks for sharing. property staging






I really want to thank you for yet another great informative post, I’m a loyal visitor to this blog and I can’t say how much valuable tips I’ve learned from reading your content. I really appreciate all the hard work you put into this great blog. medical centre






Nice post. I find out some thing more challenging on different blogs everyday. Most commonly it is stimulating to read content using their company writers and exercise a little something from their site. I’d choose to apply certain together with the content on my own weblog regardless of whether you do not mind. Natually I’ll offer you a link in your internet weblog. Many thanks sharing. property valuation

meidir 说:
2023年6月01日 20:07

I am typically to blogging i truly appreciate your articles. This great article has truly peaks my interest. Let me bookmark your internet site and maintain checking for brand new info. CLASES DE SALSA EN BARCELONA






Thank you for your wonderful post! It has long been very insightful. I hope that you’ll continue sharing your wisdom with us. moteras on line






Can I just now say such a relief to get somebody who really knows what theyre discussing on-line. You definitely learn how to bring a difficulty to light and produce it critical. The diet really need to read this and appreciate this side from the story. I cant think youre no more well-known simply because you undoubtedly provide the gift. actualidad españa

meidir 说:
2023年6月12日 04:39

it was a wonderful chance to visit this kind of site and I am happy to know. thank you so much for giving us a chance to have this opportunity.. https://emprendeconhuevitos.com/






I went over this website and I believe you have a lot of wonderful information, saved to my bookmarks dragon adventure world z

meidir 说:
2023年6月22日 02:35

Hi there! Nice stuff, do keep me posted when you post again something like this! news about united states and world






Thanks for picking out the time to discuss this, I feel great about it and love studying more on this topic. It is extremely helpful for me. Thanks for such a valuable help again. la pela pill

meidir 说:
2023年6月25日 19:10

Whoah this weblog is magnificent i really like studying your posts. Stay up the great paintings! You already know, many persons are looking round for this info, you can help them greatly. 3ds roms decrypted

meidir 说:
2023年6月29日 04:14

Yes i am totally agreed with this article and i just want say that this article is very nice and very informative article.I will make sure to be reading your blog more. You made a good point but I can't help but wonder, what about the other side? !!!!!!Thanks Girls football club kent

meidir 说:
2023年6月30日 20:22

Awesome and interesting article. Great things you've always shared with us. Thanks. Just continue composing this kind of post. Contrata perfiles senior






Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I'll be subscribing to your feed and I hope you post again soon. Big thanks for the useful info. Developers senior en remoto

meidir 说:
2023年7月06日 06:59

i read a lot of stuff and i found that the way of writing to clearifing that exactly want to say was very good so i am impressed and ilike to come again in future.. Descubre en Las Poderosas Teatro: textos informativos y divertidos






All the contents you mentioned in post is too good and can be very useful. I will keep it in mind, thanks for sharing the information keep updating, looking forward for more posts.Thanks Horario de misas en Madrid

meidir 说:
2023年7月15日 02:55

Это очень интересный контент! Мне очень понравилось читать ваши аргументы, и я пришел к выводу, что во многих из них вы правы. Ты замечательный. https://www.interactivemedia.az/smm-nedir/

meidir 说:
2023年7月20日 04:22

Thank you for sharing. This is a very nice blog. pc games with crack

meidir 说:
2023年8月01日 04:02

I bookmared your site a couple of days ago coz your blog impresses me. slot online




Sometimes your blog is loading slowly, better find a better host.~*”;: spinix เว็บตรง




I am glad to be a visitor of this thoroughgoing blog, regards for this rare information! easyslot




I have been examinating out many of your stories and i must say pretty good stuff. I will make sure to bookmark your blog. slot easy

meidir 说:
2023年8月02日 05:09

Улучшенная разработка веб-сайтов и более удобный веб-дизайн ведут к большему удобству для пользователя. Лучшее содержание сайта означает более длительные разговоры с потенциальными клиентами. Ход и продолжительность разговора отражают доверие и уверенность клиента в вас. Все это делает ваш сайт более полезным, более профессиональным, короче говоря, лучшим сайтом в Интернете. веб-разработка

meidir 说:
2023年8月03日 23:11

Whats up, I’ve been havin a tough time attempting to rank high for the term “victorias secret coupon codes”… PLEASE approve my comment!! cake disposable carts

meidir 说:
2023年8月24日 06:49

I simply just couldnt leave your website just before saying that I really enjoyed the good quality information you offer to your visitors… Definitely will be back often to check on up on brand new stuff you post! Descargar videos de Tiktok sin marca de agua

meidir 说:
2023年9月11日 04:29

An insightful blog post right there mate ! Thanks for the post . buy fake canadian dollars

meidir 说:
2023年9月13日 02:35

Found your blog on Google and I should say that I wholly adored reading it. I’m going to bookmark slot jackpot hari ini






Exactly what I was searching for, thankyou for posting . slot jackpot

jameslam 说:
2023年9月17日 19:19

<a href="https://buymagicmushroomonlineuk.com/">buy magic mushroom online uk </a> Psilocybin mushrooms, commonly known as Buy magic mushrooms, are a polyphyletic informal group of fungi that contain psilocybin which turns into psilocin upon ingestion.

jameslam 说:
2023年9月17日 19:20

[url=https://buyundetectedcounterfeitbmoney.com/]Buy counterfeit money [/url]

meidir 说:
2023年9月29日 05:44

From my own personal experience, many times softening way up a photograph may possibly provide the photo shooter with a little bit of an imaginative flare. slot gacor terbaru




metal roofings should be the best, they are sturdy and can be replaced easily“ slot deposit pulsa




I really like seeing websites that understand the value of providing a quality useful resource for free. A hard-hitting post. kumpulan infini88




Valuable information and also excellent design and style you got here! I would like to thank you for sharing your thoughts and time into your stuff you post!! Thumbs up kumpulan slot ug




We’ve to say, I take pleasure in reading this web page. Maybe you could let me know how I can subscribing with it. kumpulan link mpo

meidir 说:
2023年10月26日 04:43

Nice post. I was checking constantly this blog and I’m impressed! Very helpful information particularly the last part I care for such information much. I was looking for this particular info for a long time. Thank you and good luck. ラブドール

meidir 说:
2023年10月30日 06:44

A person produced a few exceptional points there. My partner and i examined on the web for that concern and located most individuals goes in addition to along with your blog. Reparar Pantalla Mac en Barcelona

meidir 说:
2023年11月03日 23:29

Great job, beautiful weblog with great informational content. This is a really interesting and informative post. sex shop barcelona

meidir 说:
2023年11月04日 03:28

Judging by the way you write, you seem like a professional writer…’;~ Amazon

meidir 说:
2023年11月05日 03:59

What i do not realize is actually how you’re not really much more well-liked than you might be now. You’re so intelligent. You realize thus significantly relating to this subject, produced me personally consider it from so many varied angles. Its like women and men aren’t fascinated unless it’s one thing to accomplish with Lady gaga! Your own stuffs outstanding. Always maintain it up! g17230

meidir 说:
2023年11月18日 06:37

i would always be a fan of the TV Series samantha who, it is really very funny.. Subzero refrigerator repair Newport Beach

meidir 说:
2023年11月19日 22:32

How is it that just anyone can write a weblog and get as popular as this? Its not like youve said anything incredibly impressive more like youve painted a quite picture above an issue that you know nothing about! I dont want to sound mean, here. But do you actually think that you can get away with adding some quite pictures and not seriously say something? Relojes.Vip

meidir 说:
2023年11月28日 02:37

Howdy! Someone in my Myspace group shared this site with us so I came to take a look. I’m definitely loving the information. I’m book-marking and will be tweeting this to my followers! Superb blog and great style and design. Netflix turkey




Can I simply say what a relief to search out somebody who truly is aware of what theyre speaking about on the internet. You undoubtedly know the way to convey a difficulty to light and make it important. More individuals must read this and understand this facet of the story. I cant consider youre no more common since you definitely have the gift. Filtro para tortugas

meidir 说:
2023年11月28日 04:27

This web-site may be a walk-through like the info you wished about it and didn’t know who ought to. Glimpse here, and you’ll undoubtedly discover it. DESIGNING A SHELL AND TUBE HEAT EXCHANGER (STHE)

meidir 说:
2023年12月02日 06:46

What are you stating, man? I recognize everyones got their own opinion, but really? Listen, your website is awesome. I like the work you put into it, especially with the vids and the pics. But, come on. Theres gotta be a better way to say this, a way that doesnt make it seem like everybody here is stupid! DESIGNING OF PLATE AND FRAME HEAT EXCHANGERS MANUFACTURER

meidir 说:
2023年12月03日 05:03

One thing I would like to say is that car insurance canceling is a feared experience so if you’re doing the suitable things as being a driver you won’t get one. A number of people do receive the notice that they’ve been officially dropped by their insurance company they then have to struggle to get supplemental insurance after a cancellation. Cheap auto insurance rates usually are hard to get from cancellation. Knowing the main reasons for auto insurance canceling can help people prevent getting rid of in one of the most essential privileges readily available. Thanks for the ideas shared through your blog. adopción homoparental





there are textured table linens which are much better than untextured table linena;; https://deportiweb.com

meidir 说:
2023年12月04日 07:16

Hola i would really love to subscribe and read your blog posts ! uses of shell and tube heat exchanger




There’s noticeably a bundle to learn about this. I assume you made certain nice points in features also. plumbing services

meidir 说:
2023年12月07日 04:44

This is a proper weblog for everyone who is desires to learn about this topic. You know a great deal its virtually tricky to argue with you (not too I really would want…HaHa). You actually put a fresh spin with a topic thats been revealed for many years. Excellent stuff, just excellent! PFAS TREATMENT PLANT PFAS REMOVAL SYSTEM MANUFACTURER






I’d should talk to you here. Which is not some thing Which i do! I like reading an article that may get people to believe. Also, thank you permitting me to comment! Bitcoin Revolution Erfahrungen

登录 *

loading captcha image...
or Ctrl+Enter