我正在阅读这个问题的答案,发现实际上有一个方法length()
需要std::string
(我总是使用size()
).在std::string
课堂上有这种方法有什么特别的原因吗?我读过MSDN和CppRefernce,它们似乎表明size()
和之间没有区别length()
.如果是这样的话,是不是让这个班级的用户更加困惑?
如何在C++中将int转换为枚举?
例如:
enum Test
{
A, B
};
int a = 1;
Run Code Online (Sandbox Code Playgroud)
如何转换a
为Test :: A类型?
我上课了
class foo {
public:
foo();
foo( int );
private:
static const string s;
};
Run Code Online (Sandbox Code Playgroud)
在s
源文件中初始化字符串的最佳位置在哪里?
我读到一个声明为成员函数的重载运算符是非对称的,因为它只能有一个参数而另一个自动传递的参数是this
指针.所以没有比较它们的标准.另一方面,声明为a的重载运算符friend
是对称的,因为我们传递两个相同类型的参数,因此可以对它们进行比较.
我的问题是,当我仍然可以将指针的左值与参考值进行比较时,为什么会选择朋友?(使用非对称版本提供与对称相同的结果)为什么STL算法仅使用对称版本?
c++ operator-overloading member-functions friend-function non-member-functions
我有一个std::vector
特定类的对象A
.该类非常重要,并且定义了复制构造函数和移动构造函数.
std::vector<A> myvec;
Run Code Online (Sandbox Code Playgroud)
如果我用A
对象填充向量(使用例如myvec.push_back(a)
),则向量将增大,使用复制构造函数A( const A&)
来实例化向量中元素的新副本.
我可以以某种方式强制执行类的移动构造函数A
而不是使用它吗?
假设我们有一个(玩具)C++类,如下所示:
class Foo {
public:
Foo();
private:
int t;
};
Run Code Online (Sandbox Code Playgroud)
由于没有定义析构函数,因此C++编译器应该自动为类创建一个析构函数Foo
.如果析构函数不需要清理任何动态分配的内存(也就是说,我们可以合理地依赖编译器给我们的析构函数),那么将定义一个空的析构函数,即.
Foo::~Foo() { }
Run Code Online (Sandbox Code Playgroud)
做与编译器生成的一样的事情?那个空构造函数怎么样 - 也就是说,Foo::Foo() { }
?
如果存在差异,它们存在于何处?如果没有,一种方法优于另一种方法吗?
具有一个(或多个)虚拟纯函数的类是抽象的,并且它不能用于创建新对象,因此它没有构造函数.
我正在读一本提供以下示例的书:
class Employee {
public:
Employee(const char*, const char*);
~Employee();
const char* getFirstName() const;
const char* getLastName() const;
virtual double earnings() const=0 // pure virtual => abstract class
virtual void print() const
private:
char* firstName, lastName;
};
Run Code Online (Sandbox Code Playgroud)
如果类是抽象的,为什么我们有一个构造函数?它稍后使用此类(Boss
是公共派生的Employee
):
void Boss::Boss (const char* first, const char* last, double s)
: Employee (first, last)
Run Code Online (Sandbox Code Playgroud) 使用C++ 17,我们得到内联变量.
其中一个用途是在类中定义常量字段.
那么这两个常量定义之间的区别是什么:
class MyClass {
static constexpr int myFirstVar = 10;
static const inline int mySecondVar = 100;
};
Run Code Online (Sandbox Code Playgroud)
当然constexpr
是myFirstVar
隐式内联.
什么是更好的选择,使用constexpr
或inline
?
注意:当你不需要constness时,那就inline
更容易了.随着constexpr
你没有这样的选择.
有没有办法配置sqlite3,以便默认显示标题?
我知道我可以.headers on
用来打开标题,但每次启动客户端时我都要继续键入它,因为设置不会在会话之间粘连.我希望标题永久保存.