C++11 初始化 std::string 成员

标签 c++11

当我初始化调用其 C string 构造函数的类的 std::string 成员时,我收到以下错误:

error: expected identifier before string constant
error: expected ',' or '...' before string constant

尽管如此,当我使用复制初始化或列表初始化时,程序编译成功。

class Element
{
private:
    std::string sName_("RandomName"); // Compile error
    std::string sName_ = "RandomName"; // OK
    std::string sName_{"RandomName"}; // OK
}

问题出在哪里?

更新

现在我意识到这是一个愚蠢的问题,因为正如@p512所说,编译器会将其视为错误的方法声明。但我认为这个问题应该留给其他会犯同样思维错误的人。

最佳答案

std::string sName_("RandomName");

这是一个错误的函数声明 - 至少编译器是这么认为的。相反,你可以使用这样的东西:

std::string sName_ = std::string("RandomName");

您还可以在类的构造函数中使用初始值设定项列表:

class A {
public:
    A() : sName_("RandomName") {}
    std::string sName_;
};

您可以在这里找到更多相关信息:http://en.cppreference.com/w/cpp/language/initializer_list

关于C++11 初始化 std::string 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31905477/

相关文章:

c++ - 我正在尝试制作字符串函数的 HashMap

c++ - 调用 std::functions

c++ - 发布程序

c++ - 我可以在 C++ 中创建一个匿名的即时类(接口(interface)的实现)吗

c++ - 当前对象的访问类

c++ - 在 std::for_each 中返回 std::move(f)

c++ - 为什么 Clang 不喜欢 boost::transform_iterator?

C++0x : when a temporary object equals another temporary object

c++ - decltype 和括号答案是错误的?

c++ - 关于分配器重新绑定(bind)的查询