如何禁止分配不参考变量
how to forbid assignment to not reference variables?
我担心这是一个愚蠢的问题,但是...
某人可以建议我一种迫使我从函数(或方法)返回引用到内部静态变量或类/结构的成员的返回值的方法,仅分配给参考变量?
我试图用最小的例子来解释我想要的东西。
给定以下代码,并带有一个函数wrapValue()
,该函数返回对内部静态变量的引用,
int & wrapValue (int v0)
{
static int val;
return val = v0;
}
int main ()
{
// how to permit this ...
int & v0 { wrapValue(0) };
// ... but forbid this ...
int v1 { wrapValue(1) };
int v2;
// ... and this ?
v2 = wrapValue(2);
}
有一种方法可以允许v0
初始化(并将v0
绑定到静态变量),并禁止v1
的初始化和v2
的赋值(不限制v1
和v2
到静态变量)?
,如果我担心当前的C 标准是不可能的,那么有人会建议我另一种方法(但不太复杂:我打算在我想保持简单的库中使用它)禁止无限制的作业?
此解决方案有些棘手,但我认为(我认为)正如您所期望的:
#include <iostream>
struct int_wrapper {
int value;
int_wrapper &operator=(int value) {
this->value = value;
return *this;
}
operator int&() {
return value;
}
operator int() {
return value;
}
};
int_wrapper& wrapValue (int v0) {
static int_wrapper val;
return val = v0;
}
int main () {
// how to permit this ...
int & v0 = wrapValue(0);
// ... but forbid this ...
//int v1 { wrapValue(1) }; // call ambigious
int v2;
(void)v0;
(void)v2;
// ... and this ?
//v2 = wrapValue(2); // call ambigious
}
[live demo]
int是可复制的,因此人们可以根据自己的喜好复制;你不能阻止这一点。但是,您可以创建一个不可复制的包装类别。
class NonCopyableInt
{
int val;
public:
NonCopyableInt(int val) : val(val) {}
NonCopyableInt(NonCopyableInt&) = delete;
int& value() { return val; }
// todo: add some nice operators and functions such as assignment from int
}
NonCopyableInt& wrapValue (int v0)
{
static NonCopyableInt val;
return val = v0;
}
但是,人们总是可以从value()复制返回值,以便您最终遇到相同的问题。而且感觉真的很笨拙,嗯。
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 如何将向量分配给参考变量?
- 为什么即使传递给函数作为参考,指针也未被分配
- 为什么合成的复制分配运算符被定义为如果类有参考成员,则将其定义为删除
- 尝试/捕获参考分配
- 重新分配到const参考
- 分配从方法返回到变量的参考
- 分配运算符过载:返回void与返回参考参数
- 试图分配输出以查看指针和参考输出时,请勿命名类型错误
- 如何通过QT中的参考为qobject进行分配
- 分配给返回参考的函数
- C 复制分配运算符,用于参考对象变量
- C 通过参考分配 /数组传递内存
- 如何禁止分配不参考变量
- 通过参考数组传递分配的堆栈参数
- 参考记忆分配技术
- 为什么我们在分配运算符过载中使用参考返回,而不是在加上Minus OPS中使用
- 参考抽象类分配问题