Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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++ decltype()不';正在编译的类模板不起作用_C++_Templates_C++17 - Fatal编程技术网

C++ decltype()不';正在编译的类模板不起作用

C++ decltype()不';正在编译的类模板不起作用,c++,templates,c++17,C++,Templates,C++17,下面的代码片段有一个问题。 我认为编译器无法推断类型,因为值的元素类型在编译之前是未知的。是这样吗 vector values{1, 2, 3, 4, 5, 6}; vector<decltype(values[0])> {values}; ostream_iterator<int> printer{cout," "}; copy(ints.crbegin(),ints.crend(),printer); 向量值{1,2,3,4,5,6}; 向量{值}; ostream

下面的代码片段有一个问题。 我认为编译器无法推断类型,因为
值的元素类型在编译之前是未知的。是这样吗

vector values{1, 2, 3, 4, 5, 6};
vector<decltype(values[0])> {values};
ostream_iterator<int> printer{cout," "};
copy(ints.crbegin(),ints.crend(),printer);
向量值{1,2,3,4,5,6};
向量{值};
ostream_迭代器打印机{cout,“};
复制(ints.crbegin()、ints.crend()、打印机);

这里的问题是
值[0]
是一个
int&
。你自己看看:

static_assert(std::is_same_v<decltype(values[0]), int &>);
对于您的示例,这些都不是真正必要的,因为您只是在复制一个向量。所以你可以这样做:

std::vector ints = values;
// Or avoid CTAD entirely
auto ints = values;

这里的问题是
values[0]
int&
。你自己看看:

static_assert(std::is_same_v<decltype(values[0]), int &>);
对于您的示例,这些都不是真正必要的,因为您只是在复制一个向量。所以你可以这样做:

std::vector ints = values;
// Or avoid CTAD entirely
auto ints = values;

我知道这是不必要的。我想看些东西。感谢
values[0]
具有type
int
和value category lvalue,decltype规则是这种组合产生
int&
values[0]
的类型实际上不是
int&
,表达式不能有引用类型也许谈论
decltype(values)
也不错,这也是在左值上使用
decltype
,但结果是
向量
,而不是
向量&
!这是因为
decltype(id表达式)
decltype(任何其他表达式)
有不同的规则
@M.M我认为
values[0]
是一个
int&
,因为
操作符[]
返回一个引用。我不知道还有比这更重要的事。我知道这是不必要的。我想看些东西。感谢
values[0]
具有type
int
和value category lvalue,decltype规则是这种组合产生
int&
values[0]
的类型实际上不是
int&
,表达式不能有引用类型也许谈论
decltype(values)
也不错,这也是在左值上使用
decltype
,但结果是
向量
,而不是
向量&
!这是因为
decltype(id表达式)
decltype(任何其他表达式)
有不同的规则@M.M我认为
values[0]
是一个
int&
,因为
操作符[]
返回一个引用。我不知道还有比这更重要的事。