[英]How can I make my function only accept odd numbers into my array, and reject even numbers? C++
[英]Can I make sure that only reference variable can accept the result of a function?
假设我有这个 function
class Entity;
Entity& CreateEntity(){
Entity* e = new Entity();
entityVec.emplace_back(e);
return *e;
}
目前,下面的两个代码都可以编译。
Entity a = CreateEntity();
Entity& b = CreateEntity();
但是,我想确保只有一个引用变量可以接受 function 的结果。否则,代码会有很多意想不到的行为。
换句话说,有什么方法可以让Entity a = CreateEntity()
抛出错误,而只允许Entity& b = CreateEntity()
吗?
如果没有,是否有任何方式或模式可以强制执行?
谢谢。
我希望对此有一个编译器警告。 因为您要解决的问题是对性能的真正关注,尤其是在使用 STL 时。
Microsoft 代码分析可能是您正在寻找的: https: //devblogs.microsoft.com/cppblog/new-safety-rules-in-c-core-check/https://learn.microsoft.com/en-us /cpp/代码质量/c26820?view=vs-2019
如果您控制着 class,您担心在此处复制是一个可能的解决方案。 解决方法是简单地删除复制构造函数/operator=。 我写了一个宏来做这个:
// Disallow the use of the copy constructor and copy assignment operator for a class:
// Note: prefer to place this in public for better compiler error messages (Scott Meyers Effective C++)
#define UTIL_DELETE_COPY_AND_ASSIGN(udt) \
udt(const udt&) = delete; \
udt& operator =(const udt&) = delete;
class foobar
{
public:
UTIL_DELETE_COPY_AND_ASSIGN(foobar);
}
如果您仍然想保留复制构造函数/分配功能,您可以简单地制作这些函数的更明确的版本,以便用户知道他们得到了什么。
class foobar
{
public:
foobar DeepCopy(); {...}
UTIL_DELETE_COPY_AND_ASSIGN(foobar);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.