static-members 相关问题

静态成员是由同一程序的类或结构的所有实例共享的数据字段。即使不存在静态数据成员类的对象,也存在静态成员。 C ++的一个特性,大致相当于Java静态字段。

C++中模板类可以有静态成员吗

C++中的模板类可以有静态成员吗?既然它不存在并且在使用之前是不完整的,那么这可能吗?

回答 1 投票 0

如何使用静态内联成员指针和静态成员函数的正确实例?

我有一个静态回调成员函数,它通过静态内联指针调用非静态窗口过程成员函数。问题是,它最终调用了最后一个实例。这是一个例子

回答 1 投票 0

Java:重写父类的静态变量?

我有以下类,我将其用作项目中所有模型的基础: 公共抽象类 BaseModel { 静态字符串表; 静态字符串 idField = "id"; 酒吧...

回答 4 投票 0

静态成员变量的 C++ 核心指南

我的类中有一个私有静态向量,它保存指向从它创建的所有对象的指针。这是必要的,因为每个对象都需要访问所有其他对象的信息来执行某些操作

回答 3 投票 0

C++ 获取类成员的默认值而不创建新对象

让我们考虑一下定义: 带成员的结构体类 { int myIntMember = 10; } 我想获取 myIntMember 的默认值,但不创建该类的另一个实例 // 不可能 int myI...

回答 3 投票 0

对静态类成员的未定义引用

任何人都可以解释为什么以下代码无法编译吗?至少在 g++ 4.2.4 上。 更有趣的是,为什么当我将 MEMBER 转换为 int 时它会编译? #包括 类 Foo { 民众:

回答 9 投票 0

对非结构体方法的函数实现缓存的惯用方法是什么?

我有一个像这样昂贵的函数: pub fn get_expense_value(n: u64): u64 { 让 ret = 0; 对于 0 .. n { // 昂贵的东西 } 雷特 } 而且它经常被调用...

回答 2 投票 0

类模板中静态变量的显式实例化

我有以下带有静态数据成员的类,但由于对 X::list 的未定义引用而链接失败 #包括 模板< typename T1, typename T2 > 类...

回答 1 投票 0

静态成员函数在声明之前在模板类中是否可见?

静态成员函数 b 应该对 s 的默认构造函数的 require 子句可见吗? C++20 标准对所提供示例的合法性有何规定? 模板

回答 1 投票 0

如何在类模板中定义静态数据成员?

我想这样做: 模板 结构S { ... 静态双some_relevant = 1.5; }; 但我不能,因为 some_relevant 不是整数类型。这不取决于...

回答 3 投票 0

常量字符串应该是静态数据成员,还是应该位于未命名的命名空间中?

我需要定义一些仅由一个类使用的常量字符串。看起来我有三个选择: 将字符串直接嵌入到使用它们的位置。 将它们定义为私有

回答 9 投票 0

为什么不能声明嵌套类类型的内联静态数据成员?

结构sa { struct sb { int a = 123;}; 内联静态 sb b; }; 上面的代码会产生一个错误: main.cpp:25:20: 错误:‘sa::sb::a’ 的默认成员初始值设定项需要在其

回答 1 投票 0

我应该使用 std::string 还是 const char* 作为字符串常量?

我看过这两种风格的代码,我不确定一种是否比另一种更好(这只是风格问题)?您有什么建议可以解释为什么您会选择 1 而不是 ano...

回答 7 投票 0

如何从 const 成员函数内部递减静态数据成员?

类AccountManager { 私人的: 账户账户列表[100]; int *帐号; 账户* SuperVip账户; static int 经理编号; 民众 int getManagerNumber() const; }; 我有...

回答 2 投票 0

为什么不能声明 constexpr 非静态数据成员?

尝试创建具有 constexpr 属性的结构成员而不是静态会导致编译器错误(见下文)。这是为什么?对于单个常量值,我会将这个值存储在内存中...

回答 1 投票 0

为什么这个 constexpr 静态成员函数在调用时不被视为 constexpr?

为什么这个constexpr静态成员函数,由//!标识不,评论,调用时没有被视为 constexpr? 结构 Item_id { 枚举 枚举 { 大小、位置、属性、window_...

回答 2 投票 0

C++:非成员函数和静态成员函数之间的区别? [重复]

简单的问题,这里:静态成员函数(即不需要对象访问它(只需使用类标识符)即可调用的函数)和... 之间有什么区别?

回答 3 投票 0

C++如何访问派生类中的基类静态成员?

我是 C++ 静态变量的新手。我不知道如何从派生类成员函数访问基类的静态成员。 例子: #包括 类基 // 基类 {

回答 3 投票 0

为什么类中可以初始化“const static int”成员,但不能初始化“const static other”成员?

看下面的代码,这个const static int num1 = 8;编译。然而,const static double num2 = 8.8;代码给出错误。他们的修饰符都是const static,那么为什么int可以工作,但是d...

回答 3 投票 0

出现“必须调用非静态成员函数的引用”的错误

我无法理解这个错误的含义以及导致它的原因。 这是我的代码,请帮我指出错误: 类解决方案{ 民众: bool sortbysec(常量对 我无法理解这个错误的含义以及导致它的原因。 这是我的代码,请帮我指出错误: class Solution { public: bool sortbysec(const pair<int,int> &a,const pair<int,int> &b) { return (a.second < b.second); } vector<int> topKFreAquent(vector<int>& nums, int k) { unordered_map<int,int> m; for(int i=0;i<nums.size();i++) { m[nums[i]]++; } vector<pair<int,int>> v; for(auto it = m.begin();it != m.end();it++) { v.push_back(make_pair(it->first,it->second)); } sort(v.rbegin(),v.rend(),sortbysec); v.resize(k); return v; } }; 我在 sort() 调用中收到错误,确切的错误是: Line 19: Char 34: error: reference to non-static member function must be called sort(v.rbegin(),v.rend(),sortbysec); ^~~~~~~~~ 我在 StackOverflow 上搜索并找到了不同代码的解释,但我无法正确理解它。 std::sort()需要一个Compare的函数对象,它可以是一个自由函数,一个静态类方法,一个仿函数等。可以按原样调用的东西。 您正在尝试传入一个非静态类方法,这将不起作用,因为 sortbysec() 需要一个对象实例来调用它,因此有一个隐藏的 this 参数,而 std::sort() 无法传入该参数调用该方法时。 解决错误的最简单方法是将 sortbysec() 设为 static,因为它不使用 Solution 类的任何成员,例如: static bool sortbysec(const std::pair<int,int> &a, const std::pair<int,int> &b) 否则,您可以使用 std::bind() 创建一个函子,将 Solution 对象与 sortbysec 方法联系起来,这样就可以在不指定对象的情况下调用它,例如: using namespace std::placeholders; std::sort(v.rbegin(), v.rend(), std::bind(&Solution::sortbysec, this, _1, _2) ); 或者,使用 lambda 来捕获 this,例如: std::sort(v.rbegin(), v.rend(), [this](const std::pair<int,int> &a, const std::pair<int,int> &b){ return sortbysec(a, b); } ); 在 C++14 及更高版本中可以通过使用 auto 进行一些简化,例如: std::sort(v.rbegin(), v.rend(), [this](const auto &a, const auto &b){ return sortbysec(a, b); } ); 而不是这个: sort(v.rbegin(),v.rend(),sortbysec); 这个: sort(v.rbegin(), v.rend(), [this](const pair<int, int>& p1, const pair<int, int>& p2) { return this->sortbysec(p1, p2); }); 或者正如评论所说,只需将排序函数声明为静态即可。 此外,您的代码仍然无法通过此更改进行编译,因为 v 的类型为 vector<pair<int,int>> 并且与您的返回类型 <vector<int> 不匹配

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.