为什么在以下示例中,如果静态函数在类作用域内声明,编译器会无法绑定同一静态函数?
错误信息为:
在评论中提供的问题似乎解释了为什么会出现这个错误。感谢。 现在我们需要知道以下问题和链接文章中提供的答案有关:
#include <vector>
#include <iostream>
struct Foo
{
static constexpr int GetSize()
{
return 5;
}
static void ProcessArrayWrong(int(&indices)[Foo::GetSize()])
{
for(int i =0; i < Foo::GetSize(); i++)
{
indices[i]++;
}
}
};
static void ProcessArray(int(&indices)[Foo::GetSize()])
{
for(int i =0; i < Foo::GetSize(); i++)
{
indices[i]++;
}
}
int main(int argc, char* argv[])
{
int foo[Foo::GetSize()] = {1,2,3,4,5};
for(int i =0; i < Foo::GetSize(); i++)
{
std::cout << foo[i]++ << std::endl;
}
ProcessArray(foo);
ProcessArrayWrong(foo); // fails here
for(int i =0; i < Foo::GetSize(); i++)
{
std::cout << foo[i]++ << std::endl;
}
return 0;
}
错误信息为:
错误:非常量左值引用不能绑定到无关类型值 'int'。
在评论中提供的问题似乎解释了为什么会出现这个错误。感谢。 现在我们需要知道以下问题和链接文章中提供的答案有关:
- 为什么“模板技巧”能起作用?我猜是因为模板代码需要额外的编译步骤,但我更想得到一个更清晰的意见。
- 声明函数为模板是否会导致任何非期望的行为或是安全使用的?
int(&indices)[Foo::GetSize()]
是一个不完整的类型,在编译时引用了一个“谁知道有多大”的数组。 - David C. Rankin