小编Joe*_*Joe的帖子

C++ 中的临时变量和常量有什么区别?

请允许我先发布我的代码:

void Fun(short &s){}
void FunCon(const short &s){}

int main()
{
  int iTest = 20;//note: iTest is int but parameter of Fun is "short &"
  Fun(iTest);//error, I know there is a temp variable(typecast)
  FunCon(iTest);//ok
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道Fun(iTest);会生成一个新的临时变量(类型转换),但我想知道临时变量是否是一个常量

如果:为什么我不能将临时变量传递给short &

如果:我有另一个这样的代码:

class MyObject{
  public :
  void F(){}
};

MyObject MOCreator(){
  return MyObject();
}

int main()
{
   MOCreator().F();//OK
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果返回的临时变量MOCreator() 是常量,为什么临时变量可以调用非常量成员函数

我的问题是? …

c++ casting constants pass-by-reference pass-by-const-reference

5
推荐指数
1
解决办法
816
查看次数

为什么在将char添加到空字符串时返回未知值(如""+ c)?

请允许我先向您展示我的代码:

void testStringAdd(){
   char c = '$';
   string str = "";
   str += c;//the same as `str = str + c;`
   cout << str << "---";
   cout << "size : " << str.size() << endl;
   str = "" + c;//the same as `str = c + ""`;
   cout << str << "---";
   cout << "size : "<< str.size() << endl;
}
Run Code Online (Sandbox Code Playgroud)

我预计输出是:

$ ---尺寸:1

$ ---尺寸:1

但vs2013的实际输出是:

$ ---尺寸:1

---大小:0

这是一个有趣的现象,我想知道它为何如此奇怪?

注意:如果我编码string str = "";然后str == "" …

c++ string char

5
推荐指数
1
解决办法
500
查看次数