我有以下这段代码,使用g++编译时没有警告(-Wall -pedantic)。
#include <iostream>
#include <string>
using namespace std;
class Foo
{
public:
Foo(const std::string& s) : str(s)
{ }
void print()
{
cout << str << endl;
}
private:
const std::string& str;
};
class Bar
{
public:
void stuff()
{
Foo o("werd");
o.print();
}
};
int main(int argc, char **argv)
{
Bar b;
b.stuff();
return 0;
}
但是当我运行它时,只有换行符被打印出来。发生了什么事?
如果我在里面做这件事:
string temp("snoop");
Foo f(temp);
f.print();
然后它就能正常工作了!
std::string
即可。 - Miles Routconst
。这是荒谬的!const
正确性确保我们不会意外地输错或更新某些参数或计算初始化值等,如果不注意可能会严重破坏某些代码。为什么要冒险呢?为了添加一个限定符,编译器可以让我们更加安全。你可能会认为没有必要将任何变量声明为const
,但我认为这是普遍被认为是荒谬的。 - underscore_dconst
进行任何优化(大多数可能不会),那么它并没有实现任何具体的东西。对于我们这些凡人来说,它可能非常有用。但我会让这个辩论在其他已经进行并且与主题相关的线程中继续。 - underscore_d