sam*_*sam 3 c++ copy-constructor redefinition
error: redefinition of 'f'#include <iostream>
using namespace std;
void f(int x) { cout << "f" << endl; }
void f(const int x) { cout << "f (const)" << endl; } // error: redefinition of 'f'
int main() { }
Run Code Online (Sandbox Code Playgroud)
const,另一个不带)编译#include <iostream>
using namespace std;
class Foo {
public:
Foo(const Foo&) { cout << "copy (const)" << endl; }
Foo(Foo&) { cout << "copy" << endl; }
};
int main() { }
Run Code Online (Sandbox Code Playgroud)
const对于第二个示例,是否存在定义两个复制构造函数(一个有另一个没有)的用例?const在检查两个函数是否相同时,仅忽略参数的顶层属性。
“顶级”常量是什么意思?这意味着某些东西实际上是 const,正如 所报道的那样std::is_const_v。
例如int *const是 顶级 const (因为指针本身是const),并且const int *不是(因为指针本身不是const,即使它指向的是const)。
某些东西可以在多个级别上是 const ,例如const int *const。
const int在顶层也是 const,因为这里只有一个“级别”。
如果有多个星号(例如),则仅当位于最右边的星号之后int ***时,该类型才是顶级 const 。const
所以,const int是顶层const,含义const int和int顶层constness不同而已。
但是 ( 类似于const int *)const Foo&不是 const 位于顶层。这是对 的非常量引用const Foo。(引用永远不能是 const 1,例如Foo &const无法编译。)
Foo &所以和之间的区别const Foo &不在顶层,使得Foo(Foo &)和Foo(const Foo &)不同的构造函数。
1有些人认为所有引用都是有效的const,因为在创建它们后您无法使它们指向不同的对象。但语言说它们不是const,并std::is_const_v为它们返回 false 。
| 归档时间: |
|
| 查看次数: |
791 次 |
| 最近记录: |