Uma especificação no throw em uma função embutida que retorna apenas uma variável de membro e não pode lançar exceções pode ser usada por alguns compiladores para fazer pessimizações (uma palavra inventada para o oposto de otimizações) que podem ter um efeito prejudicial no desempenho. Isso é descrito na literatura do Boost: especificação de exceção
Com alguns compiladores, uma especificação de não uso em funções não em linha pode ser benéfica se as otimizações corretas forem feitas e o uso dessa função impactar o desempenho da maneira que justifica.
Para mim, parece que usá-lo ou não é uma ligação feita por um olhar muito crítico como parte de um esforço de otimização de desempenho, talvez usando ferramentas de criação de perfil.
Uma citação do link acima para aqueles com pressa (contém um exemplo de efeitos indesejados indesejados da especificação de throw em uma função embutida de um compilador ingênuo):
Justificativa da especificação de exceção
As especificações de exceção [ISO 15.4] às vezes são codificadas para indicar quais exceções podem ser lançadas ou porque o programador espera que elas melhorem o desempenho. Mas considere o seguinte membro de um ponteiro inteligente:
T & operador * () const throw () {return * ptr; }
Esta função não chama outras funções; ele manipula apenas tipos de dados fundamentais como ponteiros. Portanto, nenhum comportamento de tempo de execução da especificação de exceção pode ser invocado. A função é completamente exposta ao compilador; na verdade, é declarado em linha. Portanto, um compilador inteligente pode deduzir facilmente que as funções são incapazes de gerar exceções e fazer as mesmas otimizações que teria feito com base na especificação de exceção vazia. Um compilador "burro", no entanto, pode fazer todos os tipos de pessimizações.
Por exemplo, alguns compiladores desativam o inlining se houver uma especificação de exceção. Alguns compiladores adicionam blocos try / catch. Tais pessimizações podem ser um desastre de desempenho que torna o código inutilizável em aplicativos práticos.
Embora inicialmente atraente, uma especificação de exceção tende a ter conseqüências que requerem uma reflexão muito cuidadosa para serem entendidas. O maior problema com as especificações de exceção é que os programadores as usam como se tivessem o efeito que o programador gostaria, em vez do efeito que realmente têm.
Uma função não embutida é o único local em que uma especificação de exceção "não lança nada" pode ter algum benefício em alguns compiladores.