gpt4 book ai didi

c++ - 如何为返回数组引用的方法使用 cv 限定符?

转载 作者:IT老高 更新时间:2023-10-28 23:22:21 24 4
gpt4 key购买 nike

如果我有一个返回数组引用的成员函数 ( https://stackoverflow.com/a/5399014/4304120 ),我如何向函数添加 const 限定符?此代码无法在 Visual C++ 2010 下编译。

struct A
{
int data[10];

// this compiles
const int (&f1())[10]
{
return data;
}

// error C2143: syntax error : missing ';' before '<cv-qualifer>'
const int (&f2())[10] const
{
return data;
}
};

最佳答案

我将提出几个我认为比对这个问题的极其直接的答案更具可读性的解决方案。我确定那里有 C 语法爱好者,我向他们道歉,因为我的内存力很差,而且我无法记住那些 C 规则。

输入别名

您可以通过使用类型别名来避免奇怪的基于 C 的语法:

struct A {
using data_type = int[10];
data_type data;
data_type& f1() { return data; }
data_type const& f2() const { return data; }
};

Live demo

或使用 typedef(适用于 C++11 之前):

struct A {
typedef int data_type[10];
data_type data;
data_type& f1() { return data; }
data_type const& f2() const { return data; }
};

Live demo

自动

从 C++14 开始,您还可以使用 auto 返回类型:

struct A {
int data[10];
auto& f1() { return data; }
auto const& f2() const { return data; }
};

Live demo

标准数组

从 C++11 开始,您也可以只使用 std::array:

struct A {
using data_type = std::array<int, 10>;
data_type data;
data_type& f1() { return data; }
data_type const& f2() const { return data; }
};

Live demo

并将其简化为:

struct A {
std::array<int, 10> data;
};

Live demo

这在功能上有点相同,但对眼睛更容易。

关于c++ - 如何为返回数组引用的方法使用 cv 限定符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37438489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com