Outro problema de otimização em códigos C++

Quanto você compila o código abaixo, com máxima otimização (-O3), em C, é que o compilador jogará no lixo o assinalamento:

x = x;

Mas, considere que ‘x’ seja um objeto de uma classe MyClass, que tenha um operador de assinalamento:

class MyClass {
public:
  ...
  MyClass& operator=(const MyClass& rhs);
  ...
};

MyClass x;  // chama o construtor...

x = x;      // chama o operador de assinalamento.

O compilador C++ não tem outra alternativa senão executar o operador de assinalamento, já que ele não tem como saber, de antemão, se o código pode ir ou não para o lixo… Especialmente se a classe MyClass foi definida em um módulo .cpp e o uso da mesma estiver em outro…

De fato, esse é um truque, usando em linguagem C, para mascarar avisos de variávies não usadas… O programador sabe que, ao otimizar, o compilador se livrará da variável e, uma vez que ela foi usada no código original, nenum aviso é emitido (quando se usa a chave -Wall para emitir todos os avisos!).

Anúncios

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s