C++ volatile和const volatile std::tuple和std::get
看看C++11标准。我可以看到,为C++ volatile和const volatile std::tuple和std::get,c++,c++11,C++,C++11,看看C++11标准。我可以看到,为volatile和const volatiletuple>提供了std::tuple\u size和std::tuple\u元素的专门化 template <size_t I, class T> class tuple_element<I, volatile T>; template <size_t I, class T> class tuple_element<I, const volatile T>; tem
volatile
和const volatile
tuple>提供了std::tuple\u size
和std::tuple\u元素的专门化
template <size_t I, class T> class tuple_element<I, volatile T>;
template <size_t I, class T> class tuple_element<I, const volatile T>;
template <class T> class tuple_size<volatile T>;
template <class T> class tuple_size<const volatile T>;
我得到错误:调用“get(volatile std::tuple&)”时没有匹配的函数。
所以,如果我理解的话,我可以创建(const)volatile元组,但我不能访问它们的元素
这是预期行为还是疏忽
非常感谢。这不仅适用于std::get
,也适用于or。
那么为什么swap
不支持可变元组呢?因为
元组的任何一个都不接受易失元组。同样的道理也适用于美国。实际上,考虑到整个标准库,几乎没有类或模板为volatile objects1提供重载。也许在标准化和实施方面会有很多麻烦;或者,有易变类对象被认为是荒谬的。在这两种情况下,volatile元组当前都非常不可用,并且为它们添加get
重载将与接口的当前状态不一致
使用volatile tuple
作为类型(而不是对象)本身并没有问题,可能很有用。这一点,以及标准库中几乎所有其他类型特征也专门用于所有cv限定符的事实,导致tuple\u元素
和tuple\u大小
支持它
1,可以通过在第17条上的C++标准中搜索<代码>易失性< /代码>来轻松地检查这个问题。人们会发现,除了第29条中的原子函数(模板)外,没有函数(模板)对volatile参数重载。
在GCC 4.9上也不起作用,fwiw。const volatile
让我觉得是一个奇怪的组合。有人知道它的合法用途吗?@Cameron硬件寄存器不应该写入,但可以在您的权限下更改。当volatile
符合条件时,几乎没有
之外的标准库类型可以工作<代码>元组也不例外。
volatile std::tuple<int, int> a(1, 1);
std::cout << "a<0>=" << std::get<0>(a) << "\n";