任何人都可以告诉我在主要传递给g时会发生什么,是static_cast吗?
int & g (int&x){x++ ; return x ; }
int main()
{
const int a=5 ;
cout<<g((int&)a)<<endl;
}
Run Code Online (Sandbox Code Playgroud)
我确信没有复制,因为上面的代码类似于下面的代码:
class A
{
public:
A()
{
cout << "calling DEFAULT constructor\n\n";
}
A(A& Other)
{
cout << "Calling COPY constructor\n\n";
}
~A()
{
cout << "Calling DESTRUCTOR\n\n";
}
};
A& g(A& x)
{
cout << "Inside g(A& x) \n\n";
return x;
}
void main()
{
const A a;
g(const_cast<A&>(a));
}*/
Run Code Online (Sandbox Code Playgroud)
提前致谢 :)
我遇到类似于下面的代码片段,它会抛出编译器错误,因为它使用了一个const_iterator
.是有一个原因vec.end()
在std::copy
不会隐获得const
投?
int main(int argc, char* argv[]) {
vector<int> vec;
vec.push_back(20);
vec.push_back(30);
vector<int> copy_vec;
vector<int>::const_iterator i = vec.begin();
std::copy(i,vec.end(),back_inserter(copy_vec));
cerr<<copy_vec.size()<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我写了一个小问题来检查const数据成员上const_cast的行为.
using namespace std;
class myString{
public:
myString(char * str)
{
p=str;
}
const char * getString(){
return p;
}
private:
const char *p;
} ;
int main()
{
char *p=(char*)malloc(8);
cin>>p;
myString *m= new myString(p);
char *s =const_cast<char*>(m->getString());
s[6]='y';
cout<<s<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行此程序后,我将其作为"yogendra"(8个字母的字符串).我把输出称为"yogendya"现在我怀疑了.通过const_cast <>我们可以覆盖数据成员本身的行为,因为这里的字符串是const char*仍然在转换后我可以修改它.
CallingClass::CallingFunc()
{
SomeClass obj;
obj.Construct(*Singleton::GetInstance()); // passing the listener
// Singleton::GetInstance() returns a static pointer.
//Singleton is derived from IListener
}
SomeClass::Construct(const IListener &listener)
{
IListener* pListener = const_cast<IListener*>(&listener);
}
Run Code Online (Sandbox Code Playgroud)
之后const_cast
pListener
为null.有可能执行这样的类型转换吗?
谢谢