Guía de desarrollo de Boost - 4.2ignore_unused

ignore_unused

En el proceso de escritura de código, a veces habrá algunas variables que no se usan temporalmente pero deben reservarse. Los compiladores como GCC emitirán advertencias sobre esto. Use -Wunused para desactivar estos mensajes de advertencia, pero esto también puede conducir a posibles errores ocultos. peligros La forma antigua es usar la forma de (void) var para "usar" la variable, pero este método tiene un significado ambiguo y no conduce al mantenimiento.

El componente ignore_unused de la biblioteca Boost proporciona una mejor solución a este problema. Originalmente era una pequeña herramienta en la biblioteca proto. Debido a que se usa en muchas otras bibliotecas de Boost, se "rectificó" después de que se mejoraron sus funciones.

ignore_unused se encuentra en el impulso del espacio de nombres. Para usar la biblioteca ignore_unused, se debe incluir el archivo de encabezado <boost/core/ignore_unused.hpp>, es decir

#include <boost/core/ignore_unused.hpp>
using namespace boost;

uso básico

La implementación de ignore_unused es muy simple y no hace casi nada:

template <typename...Ts>
inline void ignore_unused(Ts const&...)
{
    
    }

ignore_unused usa plantillas de parámetros variables, que pueden admitir cualquier cantidad de variables de cualquier tipo, "usarlas" como parámetros de la función, "engañar" al compilador y lograr exactamente el mismo efecto que (void)var. Pero su nombre es más claro y su método de escritura es más simple, y debido a que es una función en línea, no hay pérdida de eficiencia en tiempo de ejecución.

Supongamos que tenemos una función como la siguiente, que por alguna razón no toma un argumento x y declara una variable que aún no se usa:

int func(int x, int y)
{
    
    
    int i; //未使用的变量i
    return y; //未使用函数参数x
}

GCC informará un mensaje de advertencia al compilar el código:

In function 'int func(int, int) " :
warning : unused variable 'i'[一Wunused-variable]

At global scope :
warning: unused parameter 'x,[-Wunused-parameter]
int func(int x, int y)

Usando ignore_unused podemos ignorar explícitamente estas variables, eliminando así fácilmente estos mensajes de advertencia:

int func(int x, int y)
{
    
    
	int i;

	ignore_unused(x, i); //相当于(void)x;(void)i;
 
	return y;
}

Obviamente, ignore_unused es más fácil de entender que var de estilo C (void), sin comentarios redundantes, el código en sí lo explica todo.

uso de plantilla

La biblioteca ignore_unused también puede actuar sobre definiciones de tipos locales no utilizadas.Otra forma de hacerlo es:

template<typename...Ts>
inline void ignore_unused() //注意没有函数参数列表
{
    
    }

El uso de la plantilla de ignore_unused es similar al uso de la función, pero no requiere parámetros de función, sino que escribe el tipo que se ignorará en la lista de parámetros de la plantilla.

Por ejemplo, la siguiente función define un typedef internamente y luego lo ignora con ignore_unused:

void func2()
{
    
    
	typedef int result_type; //暂未使用的类型定义
	ignore_unused<result_type>(); //忽略未使用的类型定义
}

ejemplo de código

#include <boost/core/ignore_unused.hpp>
using namespace boost;

//
int func(int x, int y)
{
    
    
	int i;

	ignore_unused(x, i);

	return y;
}

//
void func2()
{
    
    
	typedef int result_type;
	ignore_unused<result_type>();
}


int main()
{
    
    
	//func(1, 2);
}

Supongo que te gusta

Origin blog.csdn.net/qq_36314864/article/details/132101033
Recomendado
Clasificación