我有一个课程(简化):
class a {
private:
std::vector<a> arguments;
public:
std::vector<a> getargs() { return arguments; }
};
假设该类具有成员函数:
void a::bubble() {
arguments = arguments[0].getargs();
}
这个kosher(因为命令导致数据源,参数[0]被删除了吗?)
它适用于我的编译器,但我只想检查c ++标准是否保证了此操作的安全性。
答案 0 :(得分:1)
是的,没关系。 getargs()函数在赋值之前完成。它创建了一个临时表,它存在于整个指令语句的生命周期中(一切都是;)。该临时用于调用std :: vector的赋值运算符(虽然也适用于原始类型)。一切都是洁净的,工作得很好。
答案 1 :(得分:0)
为什么不合法?当然,你仍然会为程序员的地狱而去,但是再次,它不是你,它是C ++。
答案 2 :(得分:0)
我不知道你想做什么,但它应该可以正常工作。唯一的问题是你必须确保参数中至少有一个元素。