Quando você digita o nome de um programa, como a.out , o sistema procura o arquivo em seu PATH. No meu sistema, o PATH está definido para
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
O seu é provavelmente semelhante. Para verificar, digite echo $PATH em um terminal.
O sistema examina esses diretórios na ordem indicada e, se não conseguir encontrar o programa, produzirá um erro command not found .
Preencher o comando com ./ efetivamente diz "esqueça o PATH, quero que você olhe apenas no diretório atual".
Da mesma forma, você pode dizer ao sistema para procurar em apenas outro local específico, prefixando o comando com um caminho relativo ou absoluto, como:
../ significa no diretório pai, por exemplo, ../hello procura por hello no diretório pai.
./Debug/hello : "procure hello no subdiretório de depuração do diretório atual."
ou /bin/ls : "procure por ls no diretório /bin "
Por padrão, o diretório atual não está no caminho porque é considerado um risco de segurança. Veja porque é. não está no caminho por padrão? no Superusuário por quê.
É possível adicionar o diretório atual ao seu PATH, mas pelas razões dadas na pergunta vinculada, eu não o recomendaria.