C++ const 在函数声明和其他任何地方的 & 符号的右边

标签 c++

这个:

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/

相关文章:

java - Android 上的小区广播支持?

c++ - 我怎样才能添加一个包到Qt

c++ - 如何运行 if 语句以使用 file.cFileName 查找特定文件或文件夹

c++ - 在 int 中存储大于 INT_MAX 的数字

c++ - 使用 std::unique_ptr 创建对象数组

c++ - 编译 Qt 项目并包含 Qt 库

c++ - 什么是 "stack alignment"?

c++ - 仅在 boost::asio basic_stream_socket::async_read_some 处理程序中使用部分数据

c++ - 尝试按值从 vector 中删除元素

python - 如何将boost模块从C++导入到python?