我得到了这个类:
class myClass
{
private:
struct tm minDate, maxDate;
public:
myClass();
struct tm GetMinDate() {return minDate;};
struct tm GetMaxDate() {return maxDate;};
};
和这个函数调用
SetMinMaxDate(struct tm *MinDate, struct tm *MaxDate);
以下代码
myClass myInstance;
SetMinMaxDate(&myInstance.GetMinDate(), &myInstance.GetMaxDate());
运行良好,使用 MSVC 2010 和 2005 不会生成警告。但是如果我用英特尔 C++ 编译它,我会收到警告
warning #1563: taking the address of a temporary
根据这个相关线程
临时对象(也称为右值)的生命周期与表达式相关联,并且在完整表达式的末尾调用临时对象的析构函数
SetMinMaxDate 复制使用指针传递的内容。指针本身不被存储。因此,在 SetMinMaxDate 返回之前,这 2 个临时 tm 元素应该是有效的。
这段代码有问题还是英特尔 C++ 的误报?
编辑: 我发现另一个非常有趣的帖子给出了这种行为的原因: 为什么临时获取右值的地址是非法的?