Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从标准尺寸到空隙的铸件_C++_Casting - Fatal编程技术网

C++ 从标准尺寸到空隙的铸件

C++ 从标准尺寸到空隙的铸件,c++,casting,C++,Casting,在许多旧代码中,我看到了以下代码片段的变体: std::size_t some_size = some_function_that_returns_size_t(); (void)some_size; assert(some_size > some_other_size); 强制转换为无效的目的是什么 请记住,这不是向无效* 如果必须猜测的话,这看起来像是一个安全检查,以确保机器大小在编译时大于空值 如果初始值足够大,在解释器中玩会发现cast将返回一个不同于some_size的值,但

在许多旧代码中,我看到了以下代码片段的变体:

std::size_t  some_size = some_function_that_returns_size_t();
(void)some_size;
assert(some_size > some_other_size);
强制转换为无效的目的是什么

请记住,这不是向
无效*

如果必须猜测的话,这看起来像是一个安全检查,以确保机器大小在编译时大于空值

如果初始值足够大,在解释器中玩会发现cast将返回一个不同于
some_size
的值,但是由于没有赋值,我真的不明白这有什么意义


如果有关系的话,这是在分配库中找到的,作为对对齐和大小进行分配检查的一部分。

据我所知,此技巧用于防止编译器发出警告,指出已定义变量,但未使用该变量。

据我所知,此技巧用于防止编译器发出警告,指出已定义变量但未使用。

断言将在发布版本中被删除,然后
某些大小的
将由于未使用的局部变量而生成警告。“强制转换为无效”没有效果,它将抑制该警告。通常,封装在宏(如
未使用的\u参数(x)
中的
assert
将在发布版本中被清除,然后
某些大小的
将由于未使用的局部变量而生成警告。“强制转换为无效”没有效果,它将抑制该警告。这通常被封装在宏中,比如
未使用的\u参数(x)
。它会阻止某些编译器,而不是所有编译器。@Jarod42可能是这样。但是我看不出使用这样一行代码的任何其他理由。你认为编译器会优化掉这个语句吗?我想对于发布版本,最好设置
no\u variable\u set\u but\u unused
标志,但对于具体情况来说可能更好…?我同意你的观点,我只是警告它不适用于所有编译器。干净的方法是定义一个函数,比如
template void unuseadarg(const T&/*No name*/){}
,它会阻止一些编译器,而不是所有编译器。@Jarod42可能是这样。但是我看不出使用这样一行代码的任何其他理由。你认为编译器会优化掉这个语句吗?我想对于发布版本,最好设置
no\u variable\u set\u but\u unused
标志,但对于具体情况来说可能更好…?我同意你的观点,我只是警告它不适用于所有编译器。简洁的方法是定义一个函数,如
template void unuseadarg(const T&/*No name*/){}