- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
带有模式匹配的函数式语言(有时?)可能会忽略一些绑定(bind)值,但使用 C++17 结构化绑定(bind)似乎没有办法做到这一点( std::ignore with structured bindings? )。建议是使用虚拟名称,但随后我们会收到有关未使用变量的警告。
有了clang和gcc的最新头,这就是预期的事情,很好用,
[[maybe_unused]] auto x =4 ; // fine, no warning
[[maybe_unused]] auto [a,dummyb,dummyc] = std::tuple<int,int,float>(1,1,1.0f);
但我也希望这能奏效:
auto [g,[[maybe_unused]]dummyh,[[maybe_unused]]dymmyi] =
std::tuple<int,int,float>(1,1,1.0f);
有没有具体原因attributes这里不能用吗? (在标准和技术上)。 gcc 和 clang 都不接受这个。
编辑,收集支持状态:(感谢godbolt/compiler explorer)。它按预期工作(也可能更早):
在godbolt 中试用https://gcc.godbolt.org/z/H2duYd
最佳答案
在结构绑定(bind)论文中:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0144r2.pdf
他们讨论他们的推理:
3.8 Should there be a way to explicitly ignore components?
The motivation would be to silence compiler warnings about unused names.
We think the answer should be “not yet.” This is not motivated by use cases (silencing compiler warnings is a motivation, but it is not a use case per se), and is best left until we can revisit this in the context of a more general pattern matching proposal where this should fall out as a special case.
Symmetry with std::tie would suggest using something like a std::ignore:
tuple<T1,T2,T3> f();
auto [x, std::ignore, z] = f(); // NOT proposed: ignore second elementHowever, this feels awkward.
Anticipating pattern matching in the language could suggest a wildcard like _ or *, but since we do not yet have pattern matching it is premature to pick a syntax that we know will be compatible. This is a pure extension that can wait to be considered with pattern matching.
虽然这没有明确解决 [[maybe_unused]]
,但我认为推理可能是相同的。停止编译器警告不是用例。
关于c++ - 与 [[maybe_unused]] 的结构化绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41404001/
尝试使用 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
我是一名优秀的程序员,十分优秀!