[英]C++ passing a type that's identical to another type
有人可以回答這個問題嗎?
以下代碼比我的尷尬問題更好地突出了該問題。
struct vector2d
{
float x,y;
};
struct point2d
{
float x, y;
}
void drawpoint(point2d point);
int main()
{
vector2d vec = {100, 100};
drawpoint(vec);
}
void drawpoint(point2d point)
{
...
}
我想知道為什么這不起作用。 另一種選擇是通過一個中間堆point2d變量手動轉換類型,但是編譯器會看到這一點並知道這不是必需的嗎?
在此,我可能錯過了一件非常簡單的事情,謝謝。
編譯器不會通過隨意轉換類型來幫助您。 假設您有一個具有float
寬度和高度的Rectangle
類,以及一個具有float
高度和權重的PatientInformation
類。 如果傳遞了錯誤的類型,您是否真的希望編譯器進行無形的轉換?
請注意,以下代碼可以正常運行:
int main()
{
vector2d vec = {100, 100};
drawpoint(reinterpret_cast<point2d const&>(vec));
}
盡管如此,這里合適的解決方案是只是使用類型更干凈。 它沒有意義的載體來傳遞給drawpoint
,任何比它將使意義的點要傳遞給moveBy
。 考慮類型,而不是成員。
point2d pnt;
memcpy(&pnt, &vec, sizeof(pnt));
drawpoint(pnt);
要么
point2d pnt = { vec.x, vec.y };
drawpoint(pnt);
要么
drawpoint(point2d{vec.x, vec.y});
要么
drawpoint(*(const point2d*)&vec); // UB, but will work on many implementations
您不能,您必須執行以下操作:
void main
{
vector2d vec = {100, 100};
point2d p;
p.x = vec.x;
p.y = vec.y;
Drawpoint(p);
}
您有一堆小的語法問題,是否嘗試過編譯。
Struct, Void, and Float
不應該大寫
Void main
應該是int main()
但最重要的是,您已定義Drawpoint()以將Vector2D用作參數,並試圖將其傳遞給point2d。 C ++是類型安全的,不會讓您僅將一種類型替換為另一種類型。
您可以創建一個基類:
struct XY{
float x;
float y;
};
然后
struct vector2D: XY{
};
struct point2D: XY{
};
void drawPoint(XY& xy){
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.