C++ का const_cast
In this page:
data_type *pointer_name = const_cast<data_type*>(const_pointer);
data_type &reference_name = const_cast<data_type&>(const_reference);
const_cast क्या है?
const_cast operator एक variable से const qualifier add या remove करने के लिए इस्तेमाल होता है। यह मुख्य रूप से const pointers या references को उन legacy functions को pass करने के लिए इस्तेमाल होता है जो non-const parameters accept करते हैं।
उदाहरण: What is const_cast?
// Include std::cout and std::cin
#include <iostream>
void legacyPrint(char *msg) {
// Print to the console with cout
std::cout << msg << std::endl;
}
// Program execution starts in main()
int main() {
const char *text = "Hello";
legacyPrint(const_cast<char *>(text));
// Return 0 to signal that the program finished successfully
return 0;
}
Login to try C/C++/Java/PHP code in the editor
const References Modify करना
अगर एक original variable non-const declare हुआ था, आप इसे एक function को एक const reference की तरह pass कर सकते हैं, और फिर function के अंदर इसकी value temporarily modify करने के लिए const_cast इस्तेमाल कर सकते हैं।
उदाहरण: Modifying const References
// Include std::cout and std::cin
#include <iostream>
void modify(const int &x) {
int &writable = const_cast<int &>(x);
writable = 100;
}
// Program execution starts in main()
int main() {
// Declare value and set it to 5
int value = 5;
modify(value);
// Print to the console with cout
std::cout << value << std::endl;
// Return 0 to signal that the program finished successfully
return 0;
}
Login to try C/C++/Java/PHP code in the editor
Undefined Behavior Warning
आपको कभी भी एक originally const declared variable modify करने के लिए const_cast इस्तेमाल नहीं करना चाहिए। ऐसा करना Undefined Behavior cause करता है, जो memory corrupt कर सकता है या आपका program crash कर सकता है।
उदाहरण: Undefined Behavior Warning
#include <iostream>
int main() {
const int value = 10;
int &ref = const_cast<int &>(value);
// ref = 20; would be undefined behavior: value was truly const
std::cout << "Never modify a truly const original" << std::endl;
return 0;
}
Login to try C/C++/Java/PHP code in the editor
Overloaded Methods में const_cast
const_cast का एक common use const और non-const objects दोनों के लिए member functions overload करते वक्त code duplication से बचना है। आप const version की logic reuse करके non-const method implement कर सकते हैं।
उदाहरण: const_cast in Overloaded Methods
// Include std::cout and std::cin
#include <iostream>
// Define the type Data
class Data {
// Declare value and set it to 5
int value = 5;
// Members below can be accessed from outside the class
public:
const int &get() const { return value; }
int &get() {
return const_cast<int &>(static_cast<const Data &>(*this).get());
}
};
// Program execution starts in main()
int main() {
Data d;
d.get() = 42;
// Print to the console with cout
std::cout << d.get() << std::endl;
// Return 0 to signal that the program finished successfully
return 0;
}
Login to try C/C++/Java/PHP code in the editor
const_cast Alternatives
const_cast इस्तेमाल करने से पहले, alternative solutions consider करें। अगर आपको एक const function के अंदर एक class member variable modify करना है, उस member variable को इसकी बजाय mutable keyword से declare करें।
उदाहरण: const_cast Alternatives
// Include std::cout and std::cin
#include <iostream>
// Define the type Cache
class Cache {
mutable int hits = 0;
// Members below can be accessed from outside the class
public:
void access() const { hits++; }
int getHits() const { return hits; }
};
// Program execution starts in main()
int main() {
Cache c;
c.access();
// Print to the console with cout
std::cout << c.getHits() << std::endl;
// Return 0 to signal that the program finished successfully
return 0;
}
Login to try C/C++/Java/PHP code in the editor
- एक originally
constdeclared object modify करने के लिएconst_castइस्तेमाल करना, जो undefined behavior है। - design fix करने की बजाय const errors silence करने के लिए
const_castइस्तेमाल करना। - यह उम्मीद करना कि
const_castconst या volatile add या remove करने के अलावा दूसरे types बदलेगा।
Chapter Quiz — Complete all 17 topics to unlock
0/17 topics done
Complete these topics first:
- C++ vs C Differences
- C++ Interview Questions
- C++ Debugging Techniques
- C++ Input Validation
- C++ Namespaces
- C++ Header Files
- C++ Multi-file Programming
- C++ static_cast
- C++ dynamic_cast
- C++ const_cast
- C++ reinterpret_cast
- C++ Threads (std::thread)
- C++ Mutex & Locks
- C++ async & future
- C++ Mini Project — Calculator
- C++ Mini Project — Student Management
- C++ Interview Questions Advanced