- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果一个变量仅在 assert
中使用,那么编译器通常会在程序以 Release模式(即没有调试标志)编译时产生警告。 This question建议禁用这些特定警告的方法。在答案中,建议使用 C++17 属性 maybe_unused
。然而,这些答案并没有真正被讨论过。
在这种情况下使用[[maybe_unused]]
有什么缺点吗
[[maybe_unused]] const auto i = get_i();
assert(i == 5);
为了消除有关 i
在发布版本中未使用的警告?
最佳答案
这样的建议的问题是它们可能会在没有警告的情况下导致一些开销,尤其是在一些重构之后。
只有断言内部的内容/表达式通常在发布版本中被完全删除。
如果你想在断言中使用变量,你可以使用 lambdas。看这个例子:
#include <cassert>
auto get_i(){
return 5;
}
int main(){
/* BAD
[[maybe_unused]] const auto i = get_i();
assert(i == 5);
*/
assert([&](){
const auto i = get_i();
return i == 5;
}());
}
关于c++ - 对仅在断言中使用的变量使用 [[maybe_unused]] 是否有缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62016436/
尝试使用 gcc 8.2.1 和 clang 6.0.1 编译 sqlpp17 代码库是一种非常奇怪的体验。该代码将编译器推到了极限,同时我可能遇到了一些编译器错误。 从 GCC 文档中,[[mayb
查看 [[maybe_unused]] 的规范,它指出: Appears in the declaration of a class, a typedef, a variable, a nonst
标准草案在 10.6.6 第 2 项中声明了 [[maybe_unused]] “该属性可以应用于类、typedef-name、变量、非静态数据成员、函数、枚举或枚举器的声明。” 有什么理由排除静态数
使用 [[maybe_unused]] 有什么好处?考虑 int winmain(int instance, int /*prevInstance*/, const char */*cmdline*/
我想知道为什么我不能在 lambda 的捕获列表中使用 [[maybe_unused]] 属性。是否有原因不能将捕获的列表的变量标记为 [[maybe_unused]]?这将避免捕获所有变量,意思是
如果一个变量仅在 assert 中使用,那么编译器通常会在程序以 Release模式(即没有调试标志)编译时产生警告。 This question建议禁用这些特定警告的方法。在答案中,建议使用 C++
尝试找出 [[maybe_unused]] 属性的正确语法导致了 following code : int main() { typedef int X; // warning [[m
具有模式匹配(有时?)的函数式语言有可能忽略某些绑定(bind)值,但对于 C++17 结构化绑定(bind),似乎无法做到这一点(std::ignore with structured bindin
带有模式匹配的函数式语言(有时?)可能会忽略一些绑定(bind)值,但使用 C++17 结构化绑定(bind)似乎没有办法做到这一点( std::ignore with structured bind
问题 我应该使用 [[maybe_unused]] attribute在未使用的类 *tors 上? 示例 让我们考虑以下示例: public: struct keyData{ public:
[[maybe_unused]] 的重点是告诉编译器不要警告未使用的变量,对吧?那么,为什么 GCC 在这里警告 ui 未使用? #include #include #define NDEBUG
在下面example : struct Foo { [[maybe_unused]] int member = 1; void bar() { [[maybe_unus
我是一名优秀的程序员,十分优秀!