คำถามติดแท็ก c++

คำถามเกี่ยวกับ C ++ ซึ่งเป็นภาษาการเขียนแบบสแตติกแบบหลายกระบวนทัศน์รวบรวมภาษาการเขียนโปรแกรมสำหรับวัตถุประสงค์ทั่วไป

4
Data Oriented Design - ทำไม่ได้กับสมาชิกมากกว่า 1-2 โครงสร้าง?
ตัวอย่างปกติของ Data Oriented Design ที่มีโครงสร้าง Ball: struct Ball { float Radius; float XYZ[3]; }; แล้วพวกเขาก็สร้างอัลกอริทึมที่วนซ้ำstd::vector<Ball>เวกเตอร์ จากนั้นพวกเขาก็ให้สิ่งเดียวกัน แต่นำไปใช้ใน Data Oriented Design: struct Balls { std::vector<float> Radiuses; std::vector<XYZ[3]> XYZs; }; ซึ่งเป็นสิ่งที่ดีและทั้งหมดถ้าคุณจะทำซ้ำรัศมีทั้งหมดก่อนอื่นจากนั้นทุกตำแหน่งและอื่น ๆ อย่างไรก็ตามคุณจะย้ายลูกบอลในเวกเตอร์ได้อย่างไร ในรุ่นเดิมหากคุณมีstd::vector<Ball> BallsAllคุณก็สามารถย้ายใดๆBallsAll[x]BallsAll[y] อย่างไรก็ตามในการทำเช่นนั้นสำหรับ Data Oriented เวอร์ชั่นคุณต้องทำสิ่งเดียวกันสำหรับทุก ๆ คุณสมบัติ (2 ครั้งในกรณีของ Ball - radius and position) แต่มันจะแย่ลงถ้าคุณมีคุณสมบัติมากขึ้น คุณจะต้องเก็บดัชนีสำหรับ "ลูกบอล" แต่ละลูกและเมื่อคุณพยายามที่จะย้ายไปรอบ …

4
มันแย่แค่ไหนที่เรียก println () บ่อยครั้งกว่าการต่อสตริงเข้าด้วยกันและเรียกมันครั้งเดียว?
คำถามนี้ถูกโยกย้ายจาก Code Exchange Stack Stack เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 5 ปีที่ผ่านมา ฉันรู้ว่าผลลัพธ์ไปยังคอนโซลเป็นการดำเนินการที่มีราคาแพง ในความสนใจของการอ่านรหัสบางครั้งมันก็ดีที่จะเรียกฟังก์ชั่นเพื่อส่งออกข้อความสองครั้งแทนที่จะมีสตริงข้อความยาวเป็นอาร์กิวเมนต์ ตัวอย่างเช่นมีประสิทธิภาพน้อยกว่าที่จะมี System.out.println("Good morning."); System.out.println("Please enter your name"); เมื่อเทียบกับ System.out.println("Good morning.\nPlease enter your name"); ในตัวอย่างความแตกต่างเป็นเพียงการโทรหนึ่งครั้งprintln()แต่จะเกิดอะไรขึ้นถ้ามีมากกว่านั้น ในหมายเหตุที่เกี่ยวข้องคำแถลงเกี่ยวกับการพิมพ์ข้อความอาจดูแปลกในขณะที่ดูซอร์สโค้ดหากข้อความที่จะพิมพ์ยาว ถ้าตัวอักษรไม่สามารถทำให้สั้นลงได้สิ่งที่สามารถทำได้? ควรเป็นกรณีที่มีการprintln()โทรหลายสายหรือไม่? มีคนเคยบอกฉันว่าบรรทัดของรหัสไม่ควรเกิน 80 อักขระ (IIRC) ดังนั้นคุณจะทำอย่างไร System.out.println("Good morning everyone. I am here today to present you with a very, …
23 java  c++  performance  c  io 

6
วิธีแก้ปัญหาความคิดเห็นซ้อน
ปรากฏเป็นภาษาเดียวที่ไม่สามารถซ้อนความคิดเห็นได้ คุณมีทางออกที่ดีสำหรับปัญหานี้หรือไม่? วิธีแก้ปัญหาหนึ่งใน C / C ++ และ Java คือการใช้ความคิดเห็นบรรทัดเดียวเท่านั้น แต่มันเป็นไปไม่ได้ที่จะแสดงความคิดเห็นบล็อกขนาดใหญ่ ฉันกำลังเผชิญกับสิ่งนี้: </li><!-- <li><!-- Save --> ดังนั้นฉันต้องผ่านและแก้ไขความคิดเห็นด้วยตนเอง คุณช่วยแนะนำได้ไหมว่าเราควรจัดการเรื่องนี้ในหลาย ๆ ภาษา? ฉันไม่แน่ใจ แต่หลามอาจมีวิธีแก้ปัญหานี้ด้วย'''วิธีที่อาจรวมถึง#ความคิดเห็นในหลาม? `
23 java  c++  python  c  comments 

2
C # จะรวมกับคอมไพเลอร์ภาษา C ++ หรือไม่ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ตามโพสต์นี้: http://channel9.msdn.com/Forums/Coffeehouse/MS-working-on-a-same-compiler-for-C-AND-C--Not-in-incubation-but-for-production- โพสต์นี้มีความจริงมากแค่ไหน? ควรดำเนินการอย่างจริงจังโดยโปรแกรมเมอร์ C ++ ที่ไม่ยอมใครง่ายๆ (เกม devs ฯลฯ ) หรือไม่? แก้ไข: มีจุดประสงค์อื่นสำหรับคำถามนี้ ... C # จะเข้ากันได้กับ C ++ ย้อนหลังหรือไม่
23 c#  c++ 

2
เป็นความคิดที่ดีหรือไม่ที่จะให้ลายเซ็นฟังก์ชันที่แตกต่างกันซึ่งทำสิ่งเดียวกัน
นี่คือคลาส C ++ ที่สร้างขึ้นด้วยค่าสามค่า class Foo{ //Constructor Foo(std::string, int, char); private: std::string foo; char bar; int baz; }; ชนิดพารามิเตอร์ทั้งหมดแตกต่างกัน ฉันสามารถสร้างคอนสตรัคเตอร์มากเกินไปเพื่อให้ลำดับนั้นไม่สำคัญ class Foo{ //Constructors Foo(std::string, char, int); Foo(std::string, int, char); Foo(char, int, std::string); Foo(char, std::string, int); Foo(int, std::string, char); Foo(int, char, std::string); private: std::string foo; char bar; int baz; }; แต่นั่นเป็นความคิดที่ดี? …

3
เหตุใด C ++ จึงเป็นที่โดดเด่นในการเขียนโปรแกรมการแข่งขันและการแข่งขัน? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันเข้าใจว่า C ++ เป็นภาษาที่รวดเร็วมาก แต่ไม่ใช่ C เร็วหรือเร็วกว่าในบางกรณี? จากนั้นคุณอาจบอกว่า C ++ มี OOP แต่จำนวน OOP ที่คุณต้องการสำหรับปริศนาการเขียนโปรแกรมส่วนใหญ่นั้นไม่ใหญ่มากและในความคิดของฉัน C จะสามารถจัดการได้ นี่คือเหตุผลที่ฉันถามสิ่งนี้ : ฉันสนใจการเขียนโปรแกรมการแข่งขันและการแข่งขันและฉันคุ้นเคยกับการเขียนโปรแกรมใน C อย่างไรก็ตามฉันสังเกตเห็นว่าคนส่วนใหญ่ใช้ C ++ (เช่น 17 จาก 25 ผู้เข้ารอบสุดท้ายใน Google Code Jam 2011 ใช้มันในขณะที่ไม่มีใครใช้ C) ดังนั้นฉันสงสัยว่าฉันจะเสียเปรียบกับ C. นอกเหนือจากการวางแนววัตถุสิ่งที่ทำให้ภาษา C ++ เป็นภาษาที่เหมาะสมกว่าสำหรับการแข่งขันการเขียนโปรแกรม? คุณสมบัติของภาษาที่ฉันควรเรียนรู้และใช้เพื่อการแข่งขันที่ดีขึ้นคืออะไร สำหรับพื้นหลังฉันคิดว่าตัวเองค่อนข้างเชี่ยวชาญใน …
23 c++  c 

13
สัญกรณ์ระบบฮังการียังคงเป็นประโยชน์หรือไม่? [ปิด]
เป็นการยากที่จะบอกสิ่งที่ถูกถามที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือโวหารและไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน8 ปีที่ผ่านมา ฉันค้นหาฟอรัม แต่ฉันไม่สามารถหาคำตอบได้ว่าทำไมจึงควรหลีกเลี่ยงเพียงเพราะเหตุใดมันจึงไม่ใช่กระสุนเงิน ดังนั้นฉันไม่คิดว่าคำถามนี้จะซ้ำกัน มีความถูกต้องเหตุผลว่าทำไมฉันควรยกเลิกระบบฮังการีฉันใช้เพื่อ? จนถึงตอนนี้ฉันเห็นประโยชน์ต่อไปนี้ในการใช้งาน: การตั้งชื่อตัวแปรที่สอดคล้องกัน คุณเห็นประเภทโดยไม่ต้องค้นหา (Intellisense ตาย / ทำดัชนีครึ่งเวลาดังนั้นจึงเป็นเหตุผลที่ถูกต้อง) ความหมายยังคงสามารถบรรจุลงในส่วนที่สองของชื่อ และติดตามข้อเสีย: มันทำให้บางคนรำคาญ (ไม่รู้เลยว่าทำไม) หากประเภทมีการเปลี่ยนแปลงประเภทอาจไม่ตรงกับการตั้งชื่อของตัวแปร (ฉันไม่คิดว่ามันเป็นเหตุผลที่ถูกต้องประเภทมีการเปลี่ยนแปลงน้อยและคุณมี "เปลี่ยนชื่อทั้งหมด") ดังนั้นทำไม: vector<string> vecCityNames; wstring strCity = L"abc"; //more code here vecCityNames.push_back(strCity); เลวร้ายยิ่งกว่า: vector<string> cityNames; wstring city = L"abc"; //more code here cityNames.push_back(city);//Are we pushing back int …
23 c++  naming 

7
หากตัวแปรมีทะเยอทะยานและผู้ตั้งค่ามันควรเป็นสาธารณะหรือไม่?
ฉันมีคลาสที่มีตัวแปรที่เป็นส่วนตัวและคลาสนั้นมีทะเยอทะยานและ setter สำหรับตัวแปรนั้น ทำไมไม่ทำให้ตัวแปรนั้นเป็นแบบสาธารณะ กรณีเดียวที่ฉันคิดว่าคุณต้องใช้ getters และ setters คือถ้าคุณจำเป็นต้องดำเนินการบางอย่างนอกเหนือจากการตั้งค่าหรือการรับ ตัวอย่าง: void my_class::set_variable(int x){ /* Some operation like updating a log */ this->variable = x; }

9
ทำไมไม่มีตัวดำเนินการพลังงานใน Java / C ++
ในขณะที่มีโอเปอเรเตอร์ดังกล่าว - **ใน Python ฉันสงสัยว่าทำไม Java และ C ++ จึงไม่มีตัวนี้เช่นกัน มันง่ายที่จะสร้างคลาสที่คุณกำหนดใน C ++ พร้อมกับโอเปอเรเตอร์การบรรทุกเกินพิกัด (และฉันเชื่อว่ามันเป็นไปได้ใน Java) แต่เมื่อพูดถึงประเภทดั้งเดิมเช่น int, double และอื่น ๆ คุณจะต้องใช้ไลบรารี่ ฟังก์ชั่นเช่นMath.power(และมักจะต้องร่ายทั้งสองครั้ง) ดังนั้น - ทำไมไม่กำหนดผู้ประกอบการดังกล่าวสำหรับประเภทดั้งเดิม?
23 java  c++  python 

16
ถ้าฉันไม่รู้จัก C แต่ฉันดีกับ C ++? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา ฉันมีคำถามที่ฉันคิดว่าสามารถตอบได้ดีที่สุดที่นี่ ฉันเป็นคนที่ค่อนข้างดีC++และฉันก็คุ้นเคยกับภาษาฉันได้อ่านAccelerated C++และทำแบบฝึกหัดเกือบทั้งหมดแล้ว อย่างไรก็ตามฉันมีปัญหาใหญ่ ฉันจำเป็นต้องเรียนรู้Cหรือไม่? ฉันไม่เคยทำCมาก่อนเลยในชีวิต ฉันเพิ่งเริ่มต้นC++เมื่อฉันเริ่มเขียนโปรแกรม อาจเป็นเพราะฉันสนใจรู้อยู่เสมอว่าทำไมทุกคนเรียกภาษานี้ว่าซับซ้อน ตอนนี้แม้ว่าฉันรู้คำตอบสำหรับคำถามนั้น) ฉันมีความสนใจเป็นพิเศษในการรู้ว่าฉันสามารถอยู่รอดได้โดยไม่ต้องรู้ว่าCในโลกปัจจุบัน เช่นถ้าฉันให้สัมภาษณ์ใน บริษัท ถ้าฉันบอกพวกเขาว่าฉันไม่รู้C- พวกเขาจะใช้มันเป็นปกติหรือไม่? สองภาษาที่ฉันเก่งคือ Python และ C ++ ฉันถามสาเหตุนี้ฉันได้ยินมาว่า บริษัท ถามโครงสร้างข้อมูลในการสัมภาษณ์ ดังนั้นหากพวกเขาขอให้ฉันใช้มันและถ้าฉันทำใน C ++ มันเป็นที่ยอมรับหรือไม่? และคนที่พูดว่า 'คุณจะไม่รู้ C ได้อย่างไรเมื่อคุณ C …
23 c++  c 

1
ทำไมเอกสารในบางภาษาจึงพูดว่า "เทียบเท่า" แทนที่จะเป็น "?"
เหตุใดเอกสารในบางภาษาจึงพูดว่า "เทียบเท่า" แทนที่จะเป็น "?" ตัวอย่างเช่นPython Docsพูด itertools.chain(*iterables) ... เทียบเท่ากับ: def chain(*iterables): # chain('ABC', 'DEF') --> A B C D E F for it in iterables: for element in it: yield element หรือการอ้างอิง C ++บนfind_if: พฤติกรรมของแม่แบบฟังก์ชั่นนี้เทียบเท่ากับ: template<class InputIterator, class UnaryPredicate> InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred) { while (first!=last) …

5
การดีบักหน่วยความจำเสียหาย
ก่อนอื่นฉันรู้ว่านี่ไม่ใช่คำถามสไตล์คำถาม & คำตอบที่สมบูรณ์แบบด้วยคำตอบที่สมบูรณ์ แต่ฉันไม่สามารถคิดถ้อยคำใด ๆ ที่จะทำให้มันดีขึ้น ฉันไม่คิดว่าจะมีวิธีแก้ปัญหาที่สมบูรณ์สำหรับเรื่องนี้และนี่คือหนึ่งในเหตุผลที่ฉันโพสต์ไว้ที่นี่แทนที่จะเป็น Stack Overflow เมื่อเดือนที่แล้วฉันได้เขียนรหัสเซิร์ฟเวอร์ (mmorpg) ที่ค่อนข้างเก่าเพื่อให้ทันสมัยและง่ายต่อการขยาย / ดัดแปลง ฉันเริ่มต้นด้วยส่วนเครือข่ายและใช้ห้องสมุดบุคคลที่สาม (libevent) เพื่อจัดการสิ่งต่าง ๆ สำหรับฉัน ด้วยการเปลี่ยนแฟคตอริ่งและการเปลี่ยนรหัสใหม่ฉันได้แนะนำคอร์รัปชั่นหน่วยความจำบางแห่งและฉันพยายามดิ้นรนหาว่ามันเกิดอะไรขึ้น ฉันดูเหมือนจะไม่สามารถทำซ้ำได้อย่างน่าเชื่อถือบนสภาพแวดล้อมการพัฒนา / การทดสอบของฉันแม้ว่าจะใช้บอตแบบดั้งเดิมเพื่อจำลองการโหลดบางอย่างฉันจะไม่เกิดข้อผิดพลาดอีกต่อไป (ฉันแก้ไขปัญหาเรื่องเสรีภาพซึ่งทำให้บางสิ่ง) ฉันได้ลองแล้ว: Valgrinding นรกออกมาจากมัน - ไม่มีการเขียนที่ไม่ถูกต้องจนกว่าสิ่งที่จะเกิดปัญหา (ซึ่งอาจใช้เวลา 1+ วันในการผลิต .. หรือเพียงหนึ่งชั่วโมง) ซึ่งทำให้ฉันงงงันจริง ๆ ในบางครั้งมันจะเข้าถึงหน่วยความจำที่ไม่ถูกต้อง โอกาส? (มีวิธีการ "กระจาย" ช่วงที่อยู่หรือไม่) เครื่องมือวิเคราะห์รหัส ได้แก่ ความครอบคลุมและ cppcheck ในขณะที่พวกเขาชี้ให้เห็นถึง .. ความร้ายกาจและคดีขอบในรหัสไม่มีอะไรร้ายแรง บันทึกกระบวนการจนกว่ามันจะล้มเหลวด้วย gdb …
23 c++  debugging  memory 

6
เหตุใดคุณจึงมีคำนิยามวิธีการภายในไฟล์ส่วนหัวใน C ++ เมื่ออยู่ใน C คุณไม่สามารถ?
ใน C คุณไม่สามารถนิยามฟังก์ชัน / การนำไปใช้ภายในไฟล์ส่วนหัว อย่างไรก็ตามใน C ++ คุณสามารถใช้วิธีการเต็มรูปแบบภายในไฟล์ส่วนหัว ทำไมพฤติกรรมต่างกัน
23 c++  c  headers 

6
บูรณาการอย่างต่อเนื่องสำหรับซอฟต์แวร์ทางวิทยาศาสตร์
ฉันไม่ใช่วิศวกรซอฟต์แวร์ ฉันเป็นนักเรียนปริญญาเอกในสาขาธรณีศาสตร์ เกือบสองปีที่แล้วฉันเริ่มเขียนโปรแกรมซอฟต์แวร์เชิงวิทยาศาสตร์ ฉันไม่เคยใช้การรวมอย่างต่อเนื่อง (CI) ส่วนใหญ่เป็นเพราะในตอนแรกฉันไม่รู้ว่ามันมีอยู่จริงและฉันเป็นคนเดียวที่ทำงานกับซอฟต์แวร์นี้ ในขณะนี้เนื่องจากฐานของซอฟต์แวร์กำลังเรียกใช้คนอื่นเริ่มสนใจและต้องการมีส่วนร่วมกับซอฟต์แวร์ แผนดังกล่าวคือบุคคลอื่น ๆ ในมหาวิทยาลัยอื่นกำลังนำส่วนเพิ่มเติมไปใช้กับซอฟต์แวร์หลัก (ฉันกลัวว่าพวกเขาสามารถแนะนำข้อบกพร่อง) นอกจากนี้ซอฟต์แวร์นั้นค่อนข้างซับซ้อนและยากที่จะทดสอบและฉันก็วางแผนที่จะทำงานต่อไป ด้วยเหตุผลสองประการนี้ฉันจึงคิดจะใช้ CI มากขึ้นเรื่อย ๆ เนื่องจากฉันไม่เคยมีการศึกษาวิศวกรซอฟต์แวร์และไม่มีใครรอบตัวฉันเคยได้ยินเกี่ยวกับ CI (เราเป็นนักวิทยาศาสตร์ไม่มีโปรแกรมเมอร์) ฉันพบว่ามันยากที่จะเริ่มต้นสำหรับโครงการของฉัน ฉันมีคำถามสองสามข้อที่ฉันต้องการคำแนะนำ: ก่อนอื่นคำอธิบายสั้น ๆ เกี่ยวกับการทำงานของซอฟต์แวร์: ซอฟต์แวร์ถูกควบคุมโดยไฟล์. xml ไฟล์เดียวที่มีการตั้งค่าที่จำเป็นทั้งหมด คุณเริ่มซอฟต์แวร์โดยเพียงแค่ส่งพา ธ ไปยังไฟล์. xml เป็นอาร์กิวเมนต์อินพุตและรันและสร้างไฟล์สองสามไฟล์ที่มีผลลัพธ์ การวิ่งครั้งเดียวสามารถใช้เวลา ~ 30 วินาที มันเป็นซอฟต์แวร์ทางวิทยาศาสตร์ ฟังก์ชั่นเกือบทั้งหมดมีพารามิเตอร์อินพุตหลายค่าซึ่งชนิดส่วนใหญ่เป็นคลาสที่ค่อนข้างซับซ้อน ฉันมีไฟล์. txt หลายไฟล์ที่มีแค็ตตาล็อกขนาดใหญ่ซึ่งใช้สร้างอินสแตนซ์ของคลาสเหล่านี้ ตอนนี้มาคำถามของฉัน: การทดสอบหน่วยการทดสอบบูรณาการการทดสอบแบบครบวงจร? : ซอฟต์แวร์ของฉันมีโค้ดประมาณ 30,000 บรรทัดพร้อมฟังก์ชั่นนับร้อยและ ~ 80 คลาส …

4
รูปแบบสำหรับอินเทอร์เฟซที่ปลอดภัยใน C ++ คืออะไร
คำถามนี้ถูกโยกย้ายจาก Code Exchange Stack Stack เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 5 ปีที่ผ่านมา หมายเหตุ: ต่อไปนี้คือรหัส C ++ 03 แต่เราคาดว่าจะย้ายไปที่ C ++ 11 ในอีกสองปีข้างหน้าดังนั้นเราต้องจำไว้ ฉันกำลังเขียนแนวทาง (สำหรับมือใหม่และคนอื่น ๆ ) เกี่ยวกับวิธีเขียนอินเทอร์เฟซแบบนามธรรมใน C ++ ฉันได้อ่านบทความของซัทเทอร์ทั้งสองเรื่องแล้วค้นหาตัวอย่างและคำตอบจากอินเทอร์เน็ตและทำการทดสอบ รหัสนี้จะต้องไม่รวบรวม! void foo(SomeInterface & a, SomeInterface & b) { SomeInterface c ; // must not be default-constructible SomeInterface d(a); …
22 c++ 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.