As an addendum, what's happening here:
#include & lt ; String & gt; using namespace std; Structure A {String S; }; Int main () {A a = {0}; } Obviously, you can not set std :: string to zero. Provides an explanation about whether someone is actually going to be here (supported in context of C ++ standard) and then explain for example):
int main () {Aa = {42}; } Is any of these well-defined?
Once again a shameful question for me - I always give my Constructors Constructor, Itemprop = "text">
Your Structure A Total , therefore the general rule of total initial work for him. The procedure is described in 8.5.1. Actually the entire 8.5.1 is dedicated to it, so I do not have a reason to see the copy of the whole thing here. The general idea is almost the same as that which was in C, just suited for C ++: You take a beginner with the right, you take a member on the left and you start the member with that beginner. According to 8.5 / 12, this would be an copy-initialization .
When you do
a = {0}; You are basically starting a copy of 0 with as , that is, as as < / Code> it is equivalent to semantics
string s = 0; Compiled above because std :: string is a convertible from a const char * indicator (and it is undefined behavior, because the null pointer There is no valid argument in this case.)
Your 42 version will not be compiled for very similar reason
string s = 42; will not compile 42 a pointless indicator is not constant, and std :: string to int There is no point for conversion from type.
PS Just in case: Note that the definition of total in C ++ is not recursive (for example, unlike POD definition) . std :: string is not an aggregate, but it does not change anything for your A . A is still a composite.
Comments
Post a Comment