初始化列表作为operator []的参数

时间:2012-01-09 10:23:08

标签: c++ c++11 curly-braces initializer-list

这个问题与讨论的问题有关here

我尝试使用初始化列表创建要传递给operator[]的参数。

#include <string>
#include <vector>

struct A {

std::string& operator[](std::vector<std::string> vec)
{
  return vec.front();
}

};

int main()
{
    // ok
    std::vector<std::string> vec {"hello", "world", "test"};

    A a;
    // error: could not convert '{"hello", "world", "test"}' to 'std::vector...'
    a[ {"hello", "world", "test"} ];
}

我的编译器(GCC 4.6.1)抱怨:

g++ -std=c++0x test.cpp
test.cpp: In function ‘int main()’:
test.cpp:20:8: error: expected primary-expression before ‘{’ token
test.cpp:20:8: error: expected ‘]’ before ‘{’ token
test.cpp:20:8: error: expected ‘;’ before ‘{’ token
test.cpp:20:35: error: expected primary-expression before ‘]’ token
test.cpp:20:35: error: expected ‘;’ before ‘]’ token

这应该是有效的C ++ 11吗?

有趣的是,当使用operator()代替operator[]时,它可以正常工作。

1 个答案:

答案 0 :(得分:4)

是的,它是有效的C ++ 11,应该适用于任何兼容的编译器。

请注意,gcc中的C ++ 11支持还不成熟,此代码示例不会在任何4.6版本中编译,而只能在4.7 svn快照版本中编译。