On Wed, 14 Jul 2010 16:57:13 -0400, Heywood Floyd wrote: > Lars T. Kyllingstad Wrote: > > >> But then arrays would be different from all other types! If you have >> an array of 3 Ts, that is written T[3], regardless of what T is. Now >> consider these two cases: >> >> A. T is an int. Then T[3] becomes int[3]. >> >> B. T is an int[string]. Then T[3] becomes int[string][3]. >> >> In case A, the first element of the array is accessed like this: >> >> int[3] a; >> int firstA = a[0]; >> >> Since a is an array of int, firstA is of course an int. >> >> But then, since b is an array of int[string], we have >> >> int[string][3] b; >> int[string] firstB = b[0]; >> >> If we again want to access element "foo" of the associative array which >> is firstB, we write firstB["foo"]. And so we have the following three >> ways to get to that element, which *must* be equivalent because that's >> how the language is defined: >> >> // Using firstB as an intermediate step int[string] firstB = b[0]; >> int x = firstB["foo"]; >> >> // Drop the intermediate variable firstB int x = (b[0])["foo"]; >> >> // Drop the redundant parentheses >> int x = b[0]["foo"]; >> >> So you see, it can't be any other way than the way it is. :) >> >> -Lars > > Thank you for the elaborate answer! > > When you put it like that, it does make sense. But I'm sorry. I refuse. > The reason I refuse is those examples are void of any higher semantic > meaning. Once we add a semantic meaning, it simply becomes backwards: > > int[MAX_WIDTH][MAX_HEIGHT] map2d; > map2d[x][y] = 9; // Wrong! > > At least in my head, this is cognitive dissonance. To me, the language > acts as if it's low-level semantics outweighs my high-level semantics > and I should correct my thinking for that. I refuse! Seems to me it > could just as well work as: > > int[string][3] b; > int[3] firstB = b["foo"]; > int i = firstB[0]; > int j = (b["foo"])[0]; > int k = b["foo"][0]; > > But I feel like I'm the only one feeling this, so I'll just let it go > and hope my dear C-style arrays stay in :) > > BR > /HF > > PS. Never thought I'd find a reason to love C.. DS.
I do agree that, if possible, the language should match how most people think. But in this case, it is impossible, because of templates. How would the following example work with T = int[3], if arrays worked the way you want? struct MyArray(T) { T[] a; } C doesn't have this issue, because it doesn't have templates. And I'll have my templates over C-style array declarations any time, thank you. :) -Lars