FAQ for Instant C++ (Java Edition)
Q: Which version of C++ is targeted?
You have the option of producing native C++ or C++/CLI (VC++ 2005 and above) code.
Q: Are entire folders converted?
You can select Java folders to convert. All ".java" files within that folder will be converted and written as either combined declaration/implementation header files or as traditionally separated .h/.cpp files to the directory you specify. However, Instant C++ does not construct the new VC++ project file. This is due to the lack of one-to-one correspondence between Java project types and formats and VC++ project types and formats.
Q: Is the original Java code altered in any way?
Your existing code is left completely intact. The new C++ files are written to the new location that you specify.
Q: Do you guarantee a 100% complete conversion?
No. Our converter accuracy is the highest in the industry, but there will be some minor tweaks required in all but the most trivial conversions. Read the rest of the FAQ to get an idea of a few things that are not converted. It is critical to try some of your own code when comparing Java to C++ converters since it is very easy to create a converter that does very well on a specific sample set. The most important criterion is how well the converter does on your own code, and this is where Instant C++ (Java Edition) will clearly show its superiority.
Q: What are the most common manual adjustments?
Most Java platform or library function calls are not converted. However, we do convert a subset of the Java string, keyboard I/O, math, and utility function calls. Also, many Java container classes are converted to .NET container classes.
Types must be declared before they are used in C++. Instant C++ does not move type declarations around to satisfy this C++ requirement. In Java there is no such requirement since the Java compiler makes more than one pass through the source code.
Same class constructor calls are not supported in C++. These cases are marked with "ToDo" comments.
For the native C++ output option, only some of the Java library references are converted to native C++ equivalents. You will need to adjust most of these references yourself.
For the native C++ output option, Instant C++ cannot ensure proper deallocation of pointer variables. In some cases, a call to the delete operator is made, but in general correct memory deallocation is not included in the conversion.
Static initialization blocks or constructors are not supported in native C++. If you have selected the option to output native C++ code, then you will need to refactor the initialization logic.
Java's workaround for event handling has no direct equivalent in .NET's simple and concise event handling model.
Java wildcard generics have no equivalent in C++/CLI, unless used in a method declaration parameter list.
There will be occasional qualifier symbol adjustments required. For example, it is possible that Instant C++ fails to determine whether a particular Java dot operator should be replaced by a C++ arrow, double colon, or dot. If type analysis fails to determine the equivalent, heuristics are used to determine the most probable equivalent.
For the native C++ output option, there is no acceptable equivalent to an exception 'finally' clause.
Java local final variables have no exact equivalent in C++. These are converted to const, which requires that the assigned value be a compile-time constant. For cases where the assigned value is not a compile-time constant, you will have to remove the const qualifier.
Since Instant C++ does not map to a particular C++ project type, the Java 'main' method is left in it's original location and converted literally. Depending on the C++ project type, you will need to adjust the location and structure of the main method.