对于以下代码:
class A
{
public:
const int cx = 5;
};
Run Code Online (Sandbox Code Playgroud)
这里,将为A的每个对象创建一个cx实例.这对我来说似乎是一种浪费,因为cx永远不会被修改.实际上,我没有看到任何理由为什么编译器不应该强制使const数据成员静态.有人可以向我解释一下吗?
Ben*_*ley 10
对于所有实例,const数据成员不必相同.您可以在构造函数中初始化它.
class A
{
public:
A(int n) :cx(n) {}
const int cx;
};
int main()
{
A a1(10);
A a2(100);
}
Run Code Online (Sandbox Code Playgroud)
实际上,我没有看到任何理由为什么编译器不应该强制使const数据成员静态.
您是否认为cx可能在构造函数中初始化了一个在运行时已知的值 - 并且在不同的实例之间变化A?const成员不可能分配给他们,但有时候有一个不能改变其初始值的成员证明是有用的.
绝对不是最好的例子,而是说明这个想法:
struct Multiplier
{
const int factor;
Multiplier(int factor) : factor(factor) {}
int operator()( int val ) const
{
return val * factor;
}
};
std::vector<int> vec{1, 2, 3};
std::vector<int> vec2;
int i;
std::cin >> i;
std::transform( std::begin(vec), std::end(vec),
std::back_inserter(vec2), Multiplier(i) );
// vec2 contains multiples of the values of vec
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1215 次 |
| 最近记录: |