【发布时间】:2016-09-09 21:12:12
【问题描述】:
我认为所有类型都已签名,除非另有说明(如 int)。我惊讶地发现 char 实际上是实现定义的:
... char 对象是否可以容纳由实现定义 负值。 ...在任何特定的实现中,一个普通的
char对象可以采用与signed char相同的值或unsigned char;哪一个是实现定义的。
然而std::string 真的只是std::basic_string<char, ...>。
这个程序的语义可以从实现中改变吗?
#include <string>
int main()
{
char c = -1;
std::string s{1, c};
}
【问题讨论】:
-
是的,它确实会影响
std::sring的语义。 -
您能否更具体地说明语义变化的含义?
-
你能具体点吗? @SergeyA
-
即满足所有前提条件,无论char是有符号还是无符号,所有效果都完全相同。 @juanchopanza
-
@user6331143 程序没有做任何事情,所以是的,你可以说语义没有改变。
标签: c++