mik*_*ked 9 c++ overloading comma-operator
我正在寻找一种在编译时构建字符串数组的简单方法.对于测试,我将一个名为Strings具有以下成员的类放在一起:
Strings();
Strings(const Strings& that);
Strings(const char* s1);
Strings& operator=(const char* s1);
Strings& operator,(const char* s2);
Run Code Online (Sandbox Code Playgroud)
使用这个,我可以成功编译这样的代码:
Strings s;
s="Hello","World!";
Run Code Online (Sandbox Code Playgroud)
该s="Hello"部分调用operator=返回a Strings&然后调用的operator,get "World!".
我无法工作(在MSVC中,尚未尝试任何其他编译器)是
Strings s="Hello","World!";
Run Code Online (Sandbox Code Playgroud)
我假设这里Strings s="Hello"会调用复制构造函数,然后一切都会像第一个例子一样.但我得到错误:error C2059: syntax error : 'string'
但是,这很好用:
Strings s="Hello";
Run Code Online (Sandbox Code Playgroud)
所以我知道复制构造函数至少可以用于一个字符串.有任何想法吗?我真的很想让第二种方法工作,只是为了使代码更清洁.
Uri*_*Uri 14
我认为你的第二个例子中的逗号不是逗号运算符,而是多个变量声明的语法元素.
例如,你可以写的方式相同:
int a=3, b=4
Run Code Online (Sandbox Code Playgroud)
在我看来,你基本上是在写:
Strings s="Hello", stringliteral
Run Code Online (Sandbox Code Playgroud)
因此编译器期望逗号后面的项是变量的名称,而是看到一个字符串文字并宣布错误.换句话说,构造函数应用于"Hello",但之后的逗号不是字符串的逗号运算符.
顺便说一句,构造函数实际上不是一个复制构造函数.它从文字字符串参数创建一个字符串对象......术语复制构造函数通常应用于相同的类型.
我不推荐这种API.您将继续发现无法按预期工作的情况,因为逗号是具有最低优先级的运算符.例如,这种情况也不起作用:
if ("Hello","world" == otherStrings) { ... }
Run Code Online (Sandbox Code Playgroud)
如果每次在字符串集周围使用括号,您可能能够正常工作,如下所示:
Strings s=("Hello","World!");
Run Code Online (Sandbox Code Playgroud)
我上面的例子看起来像这样:
if (("Hello","world") == otherStrings) { ... }
Run Code Online (Sandbox Code Playgroud)
这可能会起作用,但简写语法可能不值得随之而来的棘手语义.