传递 std::array 作为引用参数
Pass std::array as Reference Parameter
我可以直接传递我的数组,但我需要知道如何通过引用传递它。我正在使用新的 std::array 和元素类型。我已经尝试了几种方法,但它们不起作用。我不确定如何将其作为参考传递。我搞砸了,我无法弄清楚。
如何将 std::array 作为引用参数传递以避免复制整个数组?
我的阵列是如何设置的:
std::array<Element, 115> Elements =
{{
/*int aNumber, float awNumber, period_number PERIOD, group_names GROUP_NAME, metal_status METALSTATUS,
valence_shell Orbital,std::string eName, std::string eSybol);*/
{},
{1, 1.00794, period::PERIOD_ONE, group::HYDROGEN, metal::NONMETAL, shell::S_ORBITAL, "Hydrogen", "H"}
}};
加工
void sortByAtomicNumber(std::array<Element, 115> elements, int minimum, int maximum)
{
int counter = 1;
for(;minimum < (maximum+1); minimum++)
{
std::cout << counter << ".) " << elements[minimum].getElementName() << std::endl;
counter++;
}
}
尝试自: http://gauravpandey.com/wordpress/?p=602//我还没有学习模板...
template<size_t N>
void sortByAtomicNumber(std::array<int, N> const& arr, int maximum, int minimum) {
int counter = 1;
for(;minimum < (maximum+1); minimum++)
{
std::cout << counter << ".) " << arr[minimum].getElementName() << std::endl;
counter++;
}
}
来自上方的错误
错误:将"const value_type {aka const Element}"作为"std::string>> Element::getElementName()"的"this"参数传递丢弃限定符 [-fpermissive]
您有一些错误:
-
在模板
sortByAtomicNumber
中,std::array<int, N>
应std::array<Element, N>
。 -
如果要调用 const 对象的函数,则该函数必须是 const。所以你的
arr
是常量引用,Element
类的void getElementName();
应该是void getElementName() const;
的。 -
如果要调用对象的非常量函数,则该对象必须是非常量函数。所以
template<size_t N> void sortByAtomicNumber(std::array<int, N> const& arr, int maximum, int minimum) { /* your code */ }
应该template<size_t N> void sortByAtomicNumber(std::array<Element, N>& arr, int maximum, int minimum) { /* your code */ }
,就像@portforwardpodcast说的那样。
注意:关于 const 类的 const 函数,您可以看到这篇文章。希望对您有所帮助。
试试这个:
void sortByAtomicNumber(std::array<Element, 115> &elements, int minimum, int maximum)
{
int counter = 1;
for(;minimum < (maximum+1); minimum++)
{
std::cout << counter << ".) " << elements[minimum].getElementName() << std::endl;
counter++;
}
}
你的函数定义看起来是错误的,常量在错误的地方:你给出了这个定义:
template<size_t N>
void sortByAtomicNumber(std::array<int, N> const& arr, int maximum, int minimum)
{
...
}
它应该是:
template<size_t N>
void sortByAtomicNumber(const std::array<int, N>& arr, int maximum, int minimum)
{
...
}
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 具有常量引用参数的函数模板专用化
- C++:常量引用参数
- 字符串引用参数的效率C++
- 通过非常量引用参数修改常量引用参数
- 如何将指针变量作为引用参数传递?
- C++初始化 std::function 时如何将占位符绑定到引用/引用参数?
- 移动类的成员作为常量引用参数传递
- C++带有适用于左值和右值的引用参数的函数
- constexpr 函数的常量引用参数:gcc/msvc vs clang/icc
- 如何使用类型特征将函数的通用引用参数限制为 r 值引用?
- 委托构造函数和引用参数
- 对 const 引用参数使用默认值会导致崩溃
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 为什么我需要将默认引用参数定义为 const 以便为其分配一个左值?
- 将非左值作为常量引用参数传递.临时是在本地作用域还是在调用方作用域中创建的?
- 如何强制函数仅接受左值引用参数
- 模板引用参数推断失败C++
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- 将unique_ptr作为引用参数或常量传递unique_ptr引用