为什么可以将整数分配给字符串变量?
why an integer can be assigned to a string variable?
在Visual Studio 2013中,如果我编写以下内容,编译器将报告错误:
std::string test = 3;
展示:
错误 C2440:"正在初始化":无法从"int"转换为 'std::basic_string,std::分配器>'。
但是,如果我将其更改为:
std::string test = "";
test = 3;
它只是编译!当然会以悲剧性错误告终。
为什么会发生这种情况?
这是因为我们有以下赋值运算符:
basic_string& operator=( CharT ch )
请参阅 CPP 首选项。
在这种情况下,int转换为字符。
这受缺陷报告 2372 的约束:从 int 到 std::string 的分配,该分配因非缺陷 (NAD( 而关闭。它说:
以下代码适用于C++:
int i = 300; std::string threeHundred; threeHundred = i;
"工作" == "编译并且没有未定义的行为"。但它 可能并不明显,实际上会误导它的作用。这 赋值将 int 转换为字符,然后使用字符串的赋值 从夏尔。虽然来自 char 的赋值可以被视为一项功能, 能够从 int 进行分配看起来像一个安全漏洞。有人可能会 相信C++像"动态类型"语言一样工作,并期望 进行词法转换。
理想情况下,char 的赋值可以弃用,以后再 删除,但作为侵入性较小的替代方案,可以考虑添加 一个 SFINAEd 删除的函数模板:
template <typename IntT> // enable if is_integral<IntT>::value basic_string& operator=(IntT) = delete;
决议是:
这应该通过写给LEWG的论文来解决
String
可从char
分配。int
隐式转换为字符。
相关文章:
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 从字符串变量中逐字符读取单词
- 对函数 PlaySound 使用字符串变量
- C++中的字符串变量
- 字符串变量,比如说"字符串str",可以直接复制到数组中吗?
- 我可以用字符串变量而不是它的名字创建容器吗? C++
- 字符串变量的大小
- 为什么我的字符串变量没有打印完整的字符串?
- 字符串变量未更新 c++
- 如何使用 setfill 和 setw 在字符串变量中存储十六进制值
- 在.cpp文件之间传递全局字符串变量?
- 字符串变量顺序
- 为什么可以将整数分配给字符串变量?
- 在qt创建器中调试时如何访问字符串变量的完整值?
- 将字符串变量分配给无符号字符变量
- 在 c++ 中使用字符串变量选择静态类结构,而不带对象
- C++我应该用什么来保存格式化为字符串变量(如sprintf())的文件
- 我有一个字符串变量单词= "APA"
- 将字符串变量从 bash 脚本传递到根宏