[英]Is it alright to return a reference to a non-pointer member variable as a pointer?
[英]Passing non-pointer variable into function as a reference to pointer
我有一種情況,經常使用非指針變量,包括對象。
我想將這些變量設置為來自數組的現有數據集,但是我不希望進行軟拷貝,而是希望非指針變量直接指向另一個變量的內存地址。
這是解決我的難題的一個簡單示例代碼。
struct User
{
unsigned int ID;
std::string Name;
User(int id, std::string name)
{
ID = id;
Name = name;
}
};
User data[] =
{
User(2, "Jane Smith"),
};
void ChangeUser(User& user)
{
user = data[0];
}
int main()
{
User first;
ChangeUser(first);
return 0;
}
如果我想要一個可以將其更改為新地址的函數,則可以將非指針對象作為指向對象的指針。
void ChangeUser(User* user)
{
user = &data[0];
}
int main()
{
User first;
ChangeUser(&first);
return 0;
}
但是,這不會改變函數外部的變量,因為它按值傳遞指針。 我所能做的就是按引用傳遞一個指針,這意味着如果我傳遞一個指針,即使在函數之后,數據也將被更改。
void ChangeUser(User*& user)
{
user = &data[0];
}
但是,如果嘗試使用非指針變量,則會在調用函數的地方出現編譯錯誤。
error C2664: 'void ChangeUser(User *&)' : cannot convert argument 1 from 'User *' to 'User *&'
如果我按如下方式創建一個指針變量,則編譯器將接受它,並將指針數據設置為數組中成員的指針。
但是,如果我必須使用非指針變量,是否有辦法實現相同的任務? 理想情況下,我希望能夠將User變量保留為類的成員,因此不能使用局部引用變量。
編碼
User first;
ChangeUser(&first);
有效地將const User*&
指針引用(rvalue)傳遞給函數(希望是非const lvalue),因此會出現錯誤。
您不能更改已分配對象的地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.