Functions return a value based on the return type specified where the function is declared. If you have a function returns an "int" you can can only return an object that is an int, or can be converted to an int. When you have a function returning void, it simply means the function does not return anything, unless the function returns a void pointer(void*).
If you're not using the return keyword and the function is ending without returning a value, the result of such a situation is undefined, but the return value will be likely similar. Some compilers won't give errors or show warnings when programmers make such errors. I've accidentally had such a situation in Linux GCC. The compiler doesn't see a return, so it basically just guesses what the return value should be(But it also depends on the type the function returns).
// No, that is illegal
void myFunction() { return 10; }
// No, this is also wrong, but some compilers will not complain
int myFunction() { }
// OK!
int myFunction() { return 10; }
// This is also OK, but the one above is more common.
int myFunction(void) { return 10; }
Then you do something like:
int returned_value = myFunction();
std::cout << "Value is " << returned_value << std::endl;