4 ms·
people keep using this "new C++ devs" proviso, it's a red herring. to remind you: > What exactly do you need to know about C, that is not part of C++, to under
by throwawayaway 12y ago
people keep using this "new C++ devs" proviso, it's a red herring. to remind you:
> What exactly do you need to know about C, that is not part of C++, to understand C++?
why can't you memcpy classes but you can structs? it's a confederation of languages, i think coldtea's idea of representing it as a superset is excellent, you cannot understand C++ by taking out its C subset.
if that's your attitude where it's not the real reason, but you think your explanation is sufficient:
your withholding information is limiting my education and as a student i would hate that. your explanation isn't an explanation, it's an order/instruction without explanation, C++ is full of this. you only get to "why" with C.
- pjmlp 12y ago> why can't you memcpy classes but you can structs? Since when?! Try this on a struct and it will go boom! The only difference between structs and classes is the default access specifier. > C++ is full of this. you only get to "why" with C. No, you get the why by knowing Assembly and how computers work. Any system programming language since FORTRAN exposes the same set of issues. We never teached C at our university (during the 90's), first year students had Pascal followed by straight C++. If they ever need to use C, it was based on what they learned from C++. There were no C lectures, nor teaching what is C or C++. I never saw anyone speaking about learning BCPL to use K&R C, or having to learn Pascal to use Ada or Modula-2.
- throwawayaway 12y agostruct_type s1 = {0,0,0,0,0}; struct_type s2 = {0,1,2,3,4}; memcpy(s1, s2, sizeof(struct_type)); // wat is the problem :? > There were no C lectures, nor teaching what is C or C++. > Back when a I was teaching assistance in the late 90's, we never talked about C in our C++ classes What exactly do you mean by the first statement? You mean you never taught people the difference? You can't properly explain the existence of the struct data type without C, this is nothing to do with FORTRAN. > I never saw anyone speaking about learning BCPL to use K&R C, or having to learn Pascal to use Ada or Modula-2. that is not the argument I am making. the argument people are making is that you can learn C++ without learning C. they seem to be forgetting that in the process of understanding C++, you have to learn C. if you do not understand C, you cannot understand C++. to transplant your argument, if you take out all the keywords from BCPL that are shared with C and try to learn C without using them, you aren't going to get anywhere.
- pjmlp 12y ago> memcpy(s1, s2, sizeof(struct_type)); // wat is the problem :? This only works if struct_type is a POD. Meaning no member functions, no virtual functions and no inheritance. > What exactly do you mean by the first statement? You mean you never taught people the difference? No, why should I, it is all C++. It might be called struct, but only the keyword is the same, the semantics are quite different. So why bother students heads with needless details how a C compiler sees a struct and a C++ sees a struct? A struct is a class with default public access, that is all. > You can't properly explain the existence of the struct data type without C, this is nothing to do with FORTRAN. Why? It is a C++ data type. Why should I use another programming language to explain it? > If you do not understand C, you cannot understand C++. I wonder how my students could manage their exams. You have to learn C++ relation to computer hardware and the design decisions behind it. This means computer architecture and Assembly, C is not required. Sure one can explain that some decisions are related to the desire to have C++ interoperate with zero attrition in the C Eco-system, but that isn't required to explain C++ language features. Do you also want people to learn C before C# and D? Keywords and programming concepts are common across programming languages.
- throwawayaway 12y agothe question is why does a struct exist at all. just because they could pass an exam is not a great indicator of understanding. if your students put member functions, virtual functions or inheritance into a struct i wonder what mental gymnastics you would engage to explain why they shouldn't do that without using C to do so. it's like having a debate with the iraqi information minister, you don't even believe yourself what you are saying. C# and D are sufficiently different, D and C# will not compile most/any C programs. as soon as any of your students got in to a professional context and have to use C++ in anger, they found out pretty quickly that they actually didn't understand it. you did them a disservice by ignoring C. the design decisions in C++ are reactions to C - not computer hardware, architecture or assembly. there are a few exceptions to this, but they are small in number. the "why" is staring you in the face and you are willingly ignoring it. it's actually infuriating to try and learn from someone with this attitude, never explaining why correctly but giving directions with no explanation or falsified explanation.