You've received a lot of crappy answers in this thread.
It is perfectly fine to start directly with C++ instead of straight C. I would strongly recommend in this order:
You must be registered to see links
You must be registered to see links
You must be registered to see links
You must be registered to see links
You must be registered to see links
You must be registered to see links
Yes, this is a lot of reading, but you should realize what you're getting yourself into. C++ is one of the most complex and convoluted programming languages ever developed. There's a reason that most programmers have moved on to languages like C# and Java. There are usually very specific reasons anything today would be written using C++.
Be aware that you can do a lot of game development nowadays using C#, and I'd recommend learning it before moving on to C++ due to its garbage collection. If C++ is your first programming language, pointer logic is going to be very difficult for you to wrap your brain around no matter how smart you may be.
To throw my own opinion in here, I personally think C++ is a terrible language. Virtually everything it does, it does badly. Its implementation of OO compared to Java and C# is horrible. Development time for even the simplest of tasks sometimes takes ages compared to "modern" languages. The only thing it has going for it is execution speed.
I've never met a good C++ programmer who didn't master C first. I've never met a great C++ programmer who couldn't do everything in x86, if asked.
This is causation, not correlation. To be a programmer is to understand what you're doing. To understand half of what C++ builds on top of C is implicitly to understand the underlying concepts in C, and the motivation behind the additions made in C++, otherwise it's some magic.
If you learn C++, you learn that there are these things called "objects" and "new" creates them. Pointers are just basically references with a fancy name/syntax (the same things you get in Java etc), and new/delete are just annoyances you have to put up with because you don't have a GC. Man we have a tough life, C++ programmers!
If you know C, you know that 'new' is just a wrapper for malloc that hides some of its ugliness (can return NULL even if memory is available, in fact operator new is a just spins on malloc until it gets a non-NULL value or until the process runs out of memory in which case it throws), that pointers are the same pointers as in C, and that you use them for almost everything (or should, or it's probably being done wrong). Pointers are to data access and data structures what closures are to functional programming.
If you know x86, you know that malloc is really just a procedure that manages a heap, and that it's incredibly slow (and that you should use local variables if possible because it's stack allocated which is a sub esp, x, not a call to malloc which is > 1000x slower). You also know that pointers are explicitly supported as references to mem via both imm32 values (direct offsets) and register/segment addressing modes, which is how you get data at a certain address. Pointers are how you access memory AT ALL in x86, the only way outside of using a cached value in a register, and they're your fundamental tool. Your use of them in C represent this (which is why you use them liberally).
Knowledge of the basics matters. Without it, you take what you know as the lowest level, which makes you stupid, basically. If you only know C++ here, you use 'new' for everything, and this is misleading. Because 'new' in other languages is the primary (read: only) means to create a new object, you don't associate a cost with it. So you then hear people complain about needing to delete everything, and these schemes to wrap a pointer inside a local variable with a destructor so it's automatically deleted at the end of the scope (my god, trying to break abstraction with abstraction, what the duck?). They don't usually understand that you need to call free (which is what delete does, besides call your ~Class function), because you called malloc, instead of allocating on the stack. In fact, it goes way, way deeper than this.
Here's a small example of the enormous complexity introduced by C++ on top of what is a trivial and stable API in C:
You must be registered to see links
Note at the top, once introduced to malloc/free, you've just completely learned memory allocation/deallocation in C (sans OS-specific API to allocate more heap or virtual blocks, but as far as standard C is concerned, you're done). It's so simple a noob could learn it! (yeah, see the relevance to this thread?) The rest of that rant/paper is discussion about the shenanigans that is new/delete. The size alone should let you know you're in for a lot of wtf-ery, so enjoy. If you can follow every detail in that paper already knew all of it, you MIGHT be a moderately competent C++ programmer.
At the end of the day, your speed writing software depends on a few factors. Knowledge of a language, knowledge/use of libraries, and language features are among them. Specifically, the capability of a language to support the creation of simple yet useful abstractions rapidly and in a manner unlikely to be error-prone. Higher level languages give you this by being far simpler than C++, but mostly by providing powerful library support and ease of use/deployment (Perl, PHP, Ruby, Javascript, Python, etc all have shipping module management systems to download libraries, see CPAN, PECL, NPM, etc). C gives you this in that it's far more difficult to get an abstraction wrong in C than it is in C++, because your primary means of abstractions are structs and functions. C++ adds to that classes, templates, and operators, and some other things. It's not hard to see why I and many others suggest that people, especially new programmers, avoid C++.