קוד: |
'c_box' does not name a type |
קוד: |
#include<iostream>
#include<vector> using namespace std; class box { public: int hor ,ver; }; box c_box; c_box.hor = 1; c_box.ver = 1; int main (){ } |
קוד: |
class box {
public: int hor: int ver; }; int main (){ box c_box; c_box.hor = 1; c_box.ver = 1; } |
Anonymous : |
לא רק הגדרה אלא גם אתחול סטטי (שמגיע עם ההגדרה) מותרים מחוץ לפונקציה. בC++ זה כולל גם אתחול באמצעות קונסטרקטור, יש הטוענים שזה לא מומלץ. |
קוד: |
#include<iostream> #include<vector> using namespace std; class box { public: int hor ,ver; }; static box c_box = {1,1}; int main (){ return 0; } |
Anonymous : | ||||
אבל הוא לא עשה איתחול סטטי . אתחול סטטי יראה כך :
(שים לב לסינטקסט), שימוש בממבר בצורה שהוא עשה דורש זמן ריצה . |
Anonymous : |
לא רק הגדרה אלא גם אתחול סטטי (שמגיע עם ההגדרה) מותרים מחוץ לפונקציה. בC++ זה כולל גם אתחול באמצעות קונסטרקטור, יש הטוענים שזה לא מומלץ. |
Anonymous : |
הקומפיילר יכול לדאוג לביצוע קונסטרקטור לפני הפונקציה הראשית. כאמור, זה לא מומלץ |
ירחמיאל : | ||
איך זה שאיתחול באמצעות קונסטרקטור אפשר לעשות מחוץ לפונקציה? אם אני זוכר נכון (עשרות שנים לא נגעתי בזה) מה שעושים מחוץ לפונקציה מגדיר את סגמנט הנתונים, ובו אין קוד ביצועי. אם אני משתמש בקונסטרקטור, מי מריץ אותו ומתי? |
Anonymous : | ||
איתחול בקונסטרטור לא יכול להיות מחוץ לבלוק (פונקציה), |
קוד: |
#include <stdio.h> int calculate() { return 111; } class Obj { public: int a; Obj(int _a) { a = _a * 222; } }; Obj z(666); int result = calculate(); int result_2 = result + 777; int main() { printf("%d\n", result_2); return 0; } |
קוד: |
c++ -O0 -S a.cpp |
קוד: |
Obj z(666); |
קוד: |
Obj z(666); z.a = 666; |
קוד: |
struct box { int x; int y; int z; };
box c_box{.x = 1, .z = 2}; |