On Tuesday, 10 August 2021 at 13:18:24 UTC, Paul Backus wrote:
> On Tuesday, 10 August 2021 at 11:05:53 UTC, Tejas wrote:
> Also, I have read here a principle that
If it looks like C, it behaves like C
How true is that for C++? Does code that look like C++(minus obvious syntax differences) behave like C++?
No. D and C++ have different semantics for many things. One example is const
. In C++, the following code is totally fine:
int n = 123; // mutable object
const int *p = &n; // const pointer
const_cast<int*>(p) = 456; // ok to mutate via p
However, the equivalent code in D is undefined behavior:
int n = 123; // mutable object
const(int)* p = &n; // const pointer
cast(int*)p = 456; // not allowed to mutate via p
Yes, I should've been more precise.
I was hoping for an answer in terms of implicit conversions, default constructors that get created by the respective compilers(ignoring the move constructors), sequence points(Walter said that the sequence point rules are same for D and C, so is it safe to assume they're the same as C++ as well?), also whether there is any difference in template instantiations(IFTI, or template argument detection rules)
Also, about the const thing, since there is no const_cast
in D, therefore it is not the same as D, yet doesn't violate the statement that C++ that looks like D behaves the same as D, since that would require you to write (int*)
but there's casting away const, a clearly seperate language feature which has no equivalent in D; it's kind of like saying that int a[] = [1,2,3]
is not the same as in D since in D that's a dynamic array, not static. Yeah it isn't but there is an equivalent representation for it available, unlike const_cast
Sorry for the ambiguous statement below
Basically, what are the subtle gotcha's in the differences between C++ and D code that looks similar (again, I fully understanding I'm ambiguous here, but I simply don't know how to express this otherwise)
Thank you for replying!