【发布时间】:2016-01-12 13:17:06
【问题描述】:
我有一个类应该作为其输入数据,或者使用对外部数据的引用(不复制),或者根据其他输入创建数据本身。我更喜欢使用引用(以避免取消引用,因为数据是矩阵)并最终得到以下结构(简化):
#include <iostream>
#include <vector>
using namespace std;
using VectI = vector<int>;
class A {
VectI x0;
VectI const & x = x0;
public:
A(VectI const & extX) : x(extX) {} // referencing existing external data
A(int i) { x0.push_back(i); x0.push_back(i*i); } // create from other data
void show_x()
{ cout << "x ="; for (auto&& i : x) cout << " " << i; cout << endl; }
};
int main() {
VectI myX = {1, 2, 3};
A a(myX); a.show_x(); // a references myX
A b(2); b.show_x(); // b creates its own data based on i=2
return 0;
}
示例有效:
x = 1 2 3
x = 2 4
但是这种方法有什么潜在的问题吗?
特别是,我正在更改 const 向量 x 'legal' C++ 引用的 x0,还是其他编译器可能会抱怨?
另外,我可以确定第一个构造函数避免复制数据吗?
【问题讨论】:
-
代码中没有 const 向量。
x是一个参考。 -
这对Code Review 来说可能是个好问题,只要:(A) 代码有效,和(B ) 这绝不是假设性的或不完整的。发帖前请阅读on-topic guide,如果你选择去Code Review。如果您有任何问题或疑虑,请通过CR Help Desk 加入我们。
-
该向量仅在通过引用访问时才被视为 const - 向量本身不是 const - 因此没有问题,但请注意以下内容将编译但具有未定义的行为:@987654330 @.
-
@πάντα ῥεῖ 感谢您的建议。我实际上并不知道 Code Review .. 但从他们的主题指南来看,看起来他们不喜欢简化/最小的示例。无论如何,我从芭丝谢芭那里得到了一个很好的回答。
标签: c++ c++11 const-reference