আমি ঠিক কিছু ঝামেলা বুঝতে পেরেছি। প্রতিবার আমি std::string
কোনও পন্থা লিখেছি যা কোনও পরামিতি হিসাবে গ্রহণ করে , আমি নিজেকে অপরিবর্তিত আচরণের জন্য উন্মুক্ত করেছি।
উদাহরণস্বরূপ, এটি ...
void myMethod(const std::string& s) {
/* Do something with s. */
}
... এভাবে বলা যেতে পারে ...
char* s = 0;
myMethod(s);
... এবং এটি রোধ করার জন্য আমি কিছু করতে পারি না (যা আমি অবগত)।
সুতরাং আমার প্রশ্ন: কেউ এ থেকে কীভাবে তাদের রক্ষা করতে পারে?
একমাত্র দৃষ্টিভঙ্গি যা মনে আসে তা হ'ল std::string
প্যারামিটার হিসাবে স্বীকৃতিপ্রাপ্ত যে কোনও পদ্ধতির দুটি সংস্করণ সর্বদা রচনা করা :
void myMethod(const std::string& s) {
/* Do something. */
}
void myMethod(char* s) {
if (s == 0) {
throw std::exception("Null passed.");
} else {
myMethod(string(s));
}
}
এটি কি সাধারণ এবং / বা গ্রহণযোগ্য সমাধান?
সম্পাদনা: কেউ কেউ উল্লেখ করেছেন যে প্যারামিটার হিসাবে const std::string& s
পরিবর্তে আমার গ্রহণ করা উচিত std::string s
। আমি রাজী. আমি পোস্টটি পরিবর্তন করেছি। আমি মনে করি না যদিও এই উত্তরটি পরিবর্তন করে।
char* s = 0
এটি অপরিজ্ঞাত । আমি এটি আমার জীবনে কমপক্ষে কয়েকশবার দেখেছি (সাধারণত আকারে char* s = NULL
)। আপনার কি এটি ব্যাক আপ করার জন্য একটি রেফারেন্স আছে?
std:string::string(char*)
কনস্ট্রাক্টরকে বোঝাতে
const std::string&
সেই প্যারামিটারটির জন্য একটি গ্রহণ করতে পারবেন না ...?)
c_str
সম্পত্তি পরীক্ষা করতে না পারার কোনও কারণ আছে কি ?