Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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++ volatile和const volatile std::tuple和std::get_C++_C++11 - Fatal编程技术网

C++ volatile和const volatile std::tuple和std::get

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

看看C++11标准。我可以看到,为
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";