C++中赋值运算符和c-strings的问题

And*_*gen 2 c++

我正在创建一个应该能够以字符串类我能够分配c字符串的方式分配c字符串的类:

string a = "My string";
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是它的接缝不是operator=( char operand )用于此目的的接缝.所以我的问题是:用什么代替?

是)我有的:

class exstring
{
    ...

    public:
    exstring& operator=( char* );

    ...
};

...

int main()
{
    exstring test = "test";
}
Run Code Online (Sandbox Code Playgroud)

这使:

main.cpp:9:22: error: conversion from ‘const char [19]’ to non-scalar type ‘std::exstring’ requested
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Edw*_*nge 11

你不是在打电话给你operator =.您需要了解分配和初始化之间的区别.你正在做的是初始化,你需要一个构造函数来获取你提供的参数.换一种说法:

extring test = "test";
Run Code Online (Sandbox Code Playgroud)

完全相同:

extring test("test");
Run Code Online (Sandbox Code Playgroud)

除了在后一种情况下,构造函数可以是显式的,但不是前者.

  • `operator =`仍然是错的,因为它采用`char*`而不是`const char*`. (3认同)
  • 还有另外一个区别.如果复制构造函数是私有的,但是有一个可访问的构造函数采用`const char*`,第一个定义将失败.从技术上讲,第一个相当于调用两个构造函数(优化器可能会选择省略一个) - 第二个是直接初始化,只是一个构造函数调用 (3认同)