const char cp[]="jkasdkasjsad";
string a=static_cast<string>(cp);//"const string a" also runs without any error
我整个下午都坚持使用上面的代码。 C ++ Primer只提供类似
的代码const char cp[]="jkasdkasjsad";
static_cast<string>(cp);
有人能告诉我我的代码合法吗?我可以称之为&#34;抛弃const&#34;因为没有&#34; const&#34;之前&#34;字符串a&#34;?
任何明确定义的类型转换,除了那些涉及低级const的转换,都可以 请求使用
static_cast
。例如,我们可以强制使用表达式 通过将其中一个操作数强制转换为浮点除法:
我对上面的描述感到困惑,那些&#34;那些涉及低级const&#34;意思?涉及作业的左侧或右侧? 任何人都可以救我..非常感谢!
答案 0 :(得分:2)
在这种情况下根本没有真正的演员阵容。
static_cast<string>(cp);
相当于调用字符串构造函数
string(cp);
string
构建的cp
类型的临时变量将从static_cast
返回。因为,我认为我们谈论的是std::string,而这个构造函数将被称为
basic_string( const CharT* s,
const Allocator& alloc = Allocator() );
构造字符串,其中包含使用。的副本初始化的内容 s指向的以null结尾的字符串。的长度 string由第一个空字符决定。
答案 1 :(得分:2)
正在复制const char cp[] = "jkasdkasjsad";
std::string a = static_cast<std::string>(cp);
数组中的字符串,字符串变量不是const
std::string ab = cp;
相当于:
cp
cp
衰减到指向Version=1
EventType=CLR20r3
... snip ...
Sig[0].Name=問題の署名 01
Sig[0].Value=myapp.exe
Sig[1].Name=問題の署名 02
Sig[1].Value=2.2.0.1
Sig[2].Name=問題の署名 03
Sig[2].Value=541bc264
Sig[3].Name=問題の署名 04
Sig[3].Value=System
Sig[4].Name=問題の署名 05
Sig[4].Value=2.0.0.0
Sig[5].Name=問題の署名 06
Sig[5].Value=4a275e12
Sig[6].Name=問題の署名 07
Sig[6].Value=2919
Sig[7].Name=問題の署名 08
Sig[7].Value=ef
Sig[8].Name=問題の署名 09
Sig[8].Value=System.IO.IOException
... snip ...
数组
答案 2 :(得分:1)
根据C ++标准的第5.2.9 / 4条,您的代码完全合法:
可以使用a将表达式
Array ( [result] => error [msg] => 0 - This email address looks fake or invalid. Please enter a real email address. )
显式转换为类型e
如果声明T
,static_cast
形式的static_cast<T>(e)
对于一些发明的临时变量t(8.5),其形式良好。该 这种显式转换的效果与执行相同 声明和初始化然后使用临时变量 作为转换的结果。
对于您的示例T t(e);
是T
,std::string
是e
。由于新对象的创建,没有强制转换constness。与此相比:
cp