订阅字母数字是一种常见/有效的技巧吗?什么是隐含的转换? example:
#include <iostream>
using namespace std;
int main()
{
int k(2);
cout << "Hello"[k] << endl;
cout << (k-1)["Hello"] << endl;
// your code goes here
return 0;
}
答案 0 :(得分:8)
索引文字字符串并不常见,但它有其用途,例如
auto hex_digit( int const value )
-> char
{
assert( 0 < value && value < 0x10 );
return "0123456789ABCDEF"[value];
}
答案 1 :(得分:3)
当然,编写
并没有什么意义cout&lt;&lt; &#34;你好&#34; [0]&lt;&lt; ENDL;
而非简单
cout&lt;&lt; &#39; H&#39; &LT;&LT; ENDL;
但有时会出现
#define Hello "Hello"
在一些(特别是C)课程中。
在这种情况下,写一些感觉
cout&lt;&lt;你好[0]&lt;&lt; ENDL;
然而,定义
会好得多const char *Hello = "Hello";
或
const char Hello[] = "Hello";
之间没有区别
"Hello"[0]
和
0["Hello"]
因为根据C ++标准
表达式E1 [E2]与*((E1)+(E2))相同(根据定义)
然而,第二条记录只会让读者感到困惑。
至于转换然后是字符串文字的左值&#34;你好&#34;类型为const char[6]
的类型转换为const char *
类型。然后使用指针算法计算表达式*((E1)+(E2))。
答案 2 :(得分:0)
它当然有效。涉及很少的类型转换。
考虑语言元素"Hello"
实际上意味着
const char * anonymousVariable = "Hello";
然后anonymousVariable[1]
产生值为'e'
的char,而anonymousVariable[1123]
会产生不可预测的内容。
以这种方式编写代码是个好主意吗?它可能会也可能不会,取决于您尝试使用的模式。