下标字符串字面值



字母数字下标是一种常见/有效的技术吗?发生了哪些隐式转换?例子:

#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;
}

索引文字字符串并不常见,但它有它的用途,例如

auto hex_digit( int const value )
    -> char
{
    assert( 0 < value && value < 0x10 );
    return "0123456789ABCDEF"[value];
}

当然写

没有太大意义

cout & lt; & lt;"你好"[0]& lt; & lt;endl;

代替简单的

cout & lt; & lt;"H"& 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))相同

但是第二条记录只会让代码的读者感到困惑。

对于转换,将类型为const char[6]的字符串字面值"Hello"的左值转换为类型为const char *。然后使用指针算术计算表达式*((E1)+(E2))。

这当然是有效的。只涉及很少的类型转换。

考虑语言元素"Hello"实际上表示

  const char * anonymousVariable = "Hello";

anonymousVariable[1]生成值为'e'的字符,anonymousVariable[1123]生成不可预测的值。

这样写代码是个好主意吗?它可能是,也可能不是,这取决于你试图使用的模式。

最新更新