c++primer上说,由于历史原因以及为了与c语言兼容,字符串字面值与标准库string类型不是同一种类型,不知该怎么理解,谁能举例说明一下吗?string s("aa") 和 string s = "aa"是不是都支持?有何不同。。
感谢大家的回答,我的程序部分代码是这样的,,
#include<iostream>
#include<memory>
#include<stdexcept>
#include<string>
using namespace std;
class Exce : public runtime_error {
public:
Exce( int val, const string & s = "aa" ) ://这了采用复制初始化,编译通过
_val( val ), runtime_error( s ){ }
int value() { return _val; }
private:
int _val;
};
Exce a(12, "bb");
//此处声明一个对象,编译没问题,但是如果构造函数里s="aa"写成s("aa")就行不通,编译器提示:no matching function for call to 'Exce::Exce(int ,const char[3]),
candidates are: Exce::Exc(const Exce&)
Exce::Exc(int)
而在s("aa")时,若声明对象形如 Exce a(12);则没有问题,c++primer上说变量初始化分直接初始化s("aa")和复制初始化s="aa",而在函数形参表里一般只能用复制初始化,但在直接初始化下有人用GCC3.4编译通过了,不知是不是有编译器支持直接初始化。
所以我现在疑惑到底是哪边出了问题,仅仅是不符合参数表定义形式吗?
请大家帮忙分析一下,。。。