如果我有一个成员函数返回对数组的引用(/sf/answers/377931011/),如何在函数中添加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;
}
};
Run Code Online (Sandbox Code Playgroud)
Sho*_*hoe 22
我提出的一些解决方案在我看来比这个问题的直接答案更具可读性.我确定那里有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; }
};
Run Code Online (Sandbox Code Playgroud)
或者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; }
};
Run Code Online (Sandbox Code Playgroud)
从C++ 14开始,您还可以使用 auto返回类型:
struct A {
int data[10];
auto& f1() { return data; }
auto const& f2() const { return data; }
};
Run Code Online (Sandbox Code Playgroud)
从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; }
};
Run Code Online (Sandbox Code Playgroud)
并简化为:
struct A {
std::array<int, 10> data;
};
Run Code Online (Sandbox Code Playgroud)
这在功能上有些等同,但在眼睛上更容易.
使用typedef.它会让每个人的生活更轻松:
struct A
{
using Data = int[10];
Data data;
Data const& f1()
{
return data;
}
Data const& f2() const
{
return data;
}
};
Run Code Online (Sandbox Code Playgroud)
同样可以通过以下方式完成std::array<int, 10>:
std::array<int, 10> data;
std::array<int, 10> const& f2() const { return data; }
Run Code Online (Sandbox Code Playgroud)
这是std::array原始数组的另一个优点.
| 归档时间: |
|
| 查看次数: |
815 次 |
| 最近记录: |