Mat*_*att 2 c++ gcc g++ class c++11
假设我上课了Foo.以下工作正常:
class Foo
{
public:
const int* bar;
Foo()
{
bar = new int[2] {1, 2};
}
};
Run Code Online (Sandbox Code Playgroud)
但是,我尝试稍微改变一下以使用模板:
template<int A, int B>
class Foo
{
public:
const int* bar;
Foo()
{
bar = new int[2] {A, B};
}
};
Run Code Online (Sandbox Code Playgroud)
我的方法模板工作的理解是,A和B基本上编译时间常数,所以它应该仍然工作一样.
我用g ++编译时得到的错误信息(链接中为4.5,与4.6.3相同的错误)是:
错误:ISO C++禁止在数组中初始化[-fpermissive]
使用4.7时会出现类似的错误,但略有不同:
错误:数组中的括号初始值设定项[-fpermissive]
问题也发生在模板函数中,而不仅仅是在大括号内使用模板参数进行初始化,代码和输出时.(感谢Philipp)
看起来这是一个GCC错误.Clang接受了它,标准允许它:
新初始化:
(expression-list opt)
braced-init-list
这种初始化的规则并不特殊:
甲新表达式创建类型的对象
T如下初始化该对象:- 如果省略new-initializer,则默认初始化对象 (8.5); 如果没有执行初始化,则该对象具有不确定的值.
- 否则,根据8.5的初始化规则解释new-initializer以进行直接初始化.