That is perfectly legal. You can even do myFunc(,,12);
EDIT: WHOOPS! You can't actually use the piece of code I listed above, due to the fact that there is no default for the first argument. I didn't notice that detail before posting. Sorry.
Your reasoning for the first question's answer is correct.
For your second question's answer, it will set arg1 to 8, arg2 to 3, and because you supplied nothing for arg3, will set arg3 to its default of 1. It's quite systematic.
That is perfectly legal. You can even do myFunc(,,12);
What? No you can't. Why would you say that?
Arguments are filled left to right when calling functions.
Default arguments must be contiguously adjacent and aligned to the right-end of the parameter list.
As per your example, if you supply myFunc(8,3), then arg1=8 and arg2=3, and arg3 defaults to 1.
Wait...so could I do myFunc(, , 12); if all three parameters had a default argument?
Also, in my original example, is there a way to make arg1=8, arg2 be the default, and arg3=3 without just passing the default to arg2? Could I do myFunc(8, , 3)?
After doing some digging around, it seems that you can't actually do any of that in C++. I am terribly sorry, but it seems that I got my languages mixed up. In C++, you can omit arguments like myFunc(8,2) or myFunc(12) and it will be perfectly valid, but you cannot under any circumstances SKIP arguments.
Duoas also mentioned this in his post above his above post.