这个:
void foo(const std::string & bar);
同义:
void foo(std::string const& bar);
1.) 但是如果我这样做会发生什么:
void foo(std::string &const bar);
这是否意味着参数本身的地址是常量?你为什么要这样做?
2.) 此外,如果我这样做会发生什么:
void foo(const std::string const& bar);
或
void foo(std::string & bar const);
?
最佳答案
std::string &const bar
表示 bar
是对(非常量)字符串的常量引用。这没有任何意义,因为您无论如何都无法更改引用。它也是无效的,因为引用类型不能是常量。
将 const
放在那里会起作用并且也有意义的情况是在使用指针时,例如
std::string * const bar
这意味着 bar
是指向(非常量)字符串的常量指针。变量 bar
是常量,您不能将 bar
指向其他任何地方。示例:
std::string * const bar = new std::string("foo");
bar = new std::string("bar"); // Invalid as `bar` is constant
*bar = "bar"; // Valid because the string object itself is not constant
声明
const std::string const& bar
是多余的,因为它说 bar
是对常量 std::string
的引用,它是常量。
至于
std::string & bar const
这根本不是有效的语法 cv-qualifier不能放在那里。
关于C++ const 在函数声明和其他任何地方的 & 符号的右边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43537285/