【发布时间】:2020-12-26 15:59:22
【问题描述】:
有一个名为 Matrix 的结构体,带有模板参数 N 和 data_ 字段:
#include <cstddef>
#include <vector>
template <std::size_t N>
struct Matrix {
std::vector<std::vector<int>> data_{N, std::vector<int>(N)};
};
为什么不能用圆括号初始化data_?
std::vector<std::vector<int>> data_(N, std::vector<int>(N));
这是错误:
<source>:6:41: error: unknown type name 'N'
std::vector<std::vector<int>> data_(N, std::vector<int>(N));
^
<source>:6:61: error: declaration of 'N' shadows template parameter
std::vector<std::vector<int>> data_(N, std::vector<int>(N));
^
<source>:4:23: note: template parameter is declared here
template <std::size_t N>
【问题讨论】:
-
因为有圆括号,这看起来像一个函数声明。这就是为什么要引入大括号的原因。
-
Afaik 这仅适用于类范围。如果您尝试在函数范围内执行此操作,它应该可以工作。
标签: c++ c++11 templates initialization