Mik*_*ail 10 c++ string max initializer-list c++11
max({"a", "b", "z", "x"}); returns "x"
Run Code Online (Sandbox Code Playgroud)
两者都有
max<std::string>({"a", "b", "z", "x"});
Run Code Online (Sandbox Code Playgroud)
和
max({'a', 'b', 'z', 'x'});
Run Code Online (Sandbox Code Playgroud)
按原样返回"z".为什么?
jua*_*nza 14
"a","b"等都是字符串文字.这些const char*在初始化列表中衰减.max 只是可能得到一个最高的地址,但由于它使用operator<对它们进行比较,他们是不一样的阵列的一部分,或一过同一个阵列,比较的结果不确定(和调用max会导致未定义的行为,因为要求是类型be LessThanComparable).
另外两个调用max是明确定义的.charS,从而如a,b等等都是整数类型具有良好定义小于比较.并且std::string有一个operator<实现词典比较.
Ker*_* SB 12
max({"a", "b", "z", "x"});尝试比较指针.这具有未定义的行为(因为未指定单个比较的结果).你想比较指针,你应该写:
std::max({"a", "b", "z", "x"}, std::less<const char*>());
Run Code Online (Sandbox Code Playgroud)
相比之下,max({'a', 'b', 'z', 'x'});比较积分值,并max<std::string>比较字符串.