这是我的另一个问题的后续问题:班级成员的最佳顺序是什么?
如果我以公共,受保护和私人轮流的方式组织成员,它是否会改变任何事物(可见性除外)?
class Example
{
public:
SomeClass m_sc;
protected:
char m_ac[32];
SomeClass * m_scp;
private:
char * m_name;
public:
int m_i1;
int m_i2;
bool m_b1;
bool m_b2;
private:
bool m_b3;
};
Run Code Online (Sandbox Code Playgroud)
这个类和我在运行时公开所有成员的类之间有区别吗?我想遵循从大到小排序类型的规则(如果可读性没有受到严重损害).
我认为它根本不会影响编译的程序,就像const
只在编译期间检查一样.它是否正确?
我刚刚在一个函数中找到了这行代码,这让我很困惑.这在任何情况下都有意义,还是未定义的行为?
char * acFilename = acFilename;
Run Code Online (Sandbox Code Playgroud)
编辑:编译器抱怨警告C4700,我正在使用未初始化的变量.
在"更有效的C++"(第15期)一书中,我读到如果启用了异常,即使不使用异常,代码也会变得非常慢.在我看来,异常使用有限,我试图避免它们,但这是另一个主题.
我不完全理解他的陈述:
我有一套指针.在第一步中,我插入数据指针,在第二步中,我遍历整个集合并对元素执行某些操作.顺序并不重要,我只需要避免重复,这与指针比较工作正常.
我的问题是,为同一目的使用无序集是否有利.对于无序集合,插入速度更快吗?
我注意到了
std::string str;
str += 'b'; // works
str.append('b'); // does not work
str.append(1, 'b'); // works, but not as nice as the previous
Run Code Online (Sandbox Code Playgroud)
是否有任何理由说明该append
方法不支持附加单个字符?我假设它operator+=
实际上是该append
方法的包装器,但似乎并非如此.
我刚刚为std :: string编写了一个简单的实用函数.然后我注意到如果std::string
是a std::wstring
或a ,函数看起来完全一样std::u32string
.这里可以使用模板功能吗?我不是很熟悉的模板,std::string
并std::wstring
在模板本身,这可能是一个问题.
template<class StdStringClass>
inline void removeOuterWhitespace(StdStringClass & strInOut)
{
const unsigned int uiBegin = strInOut.find_first_not_of(" \t\n");
if (uiBegin == StdStringClass::npos)
{
// the whole string is whitespace
strInOut.clear();
return;
}
const unsigned int uiEnd = strInOut.find_last_not_of(" \t\n");
strInOut = strInOut.substr(uiBegin, uiEnd - uiBegin + 1);
}
Run Code Online (Sandbox Code Playgroud)
这是一个正确的方法吗?这个想法是否存在陷阱?我不是在谈论这个函数,而是使用模板化类StdStringClass
并调用常见std::string
函数(如find,replace,erase等)的一般概念.
我只是想知道如果我只允许一个const引用变量,我是否可以绕过使用getter,如下所示
#include <string>
class cTest
{
private:
int m_i;
std::string m_str;
public:
const int & i;
const std::string & str;
cTest(void)
: i(m_i)
, str(m_str)
{}
};
int main(int argc, char *argv[])
{
cTest o;
int i = o.i; // works
o.i += 5; // fails
o.str.clear(); // fails
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么人们似乎根本不这样做.我缺少一些严重的劣势吗?请提供优缺点列表,并在必要时予以纠正.
好处:
缺点:
const_cast
,人们可以搞乱私人成员,但这些人是恶作剧的,对吧?如果我有以下课程:
class Example
{
bool m_b1;
SomeClass m_sc;
bool m_b2;
char * m_name;
bool m_b3;
int m_i1;
SomeClass * m_sc;
int m_i2;
};
Run Code Online (Sandbox Code Playgroud)
会员的最佳顺序是什么?据我所知,在创建此类的实例时,成员声明的顺序等于内存中成员的顺序.
在开始之前,我需要声明我的应用程序使用了很多字符串,这些字符串平均很小,并且一旦创建就不会更改.
在Visual Studio 2010中,我注意到std :: string的容量至少为30.即使我写std::string str = "test";
了,str的容量也是30. str.shrink_to_fit()
尽管std ::存在一个具有相同名称的函数,但该函数对此没有任何作用.矢量和按预期工作,即减少容量,使容量==大小.
std::string::shrink_to_fit()
预期工作?问题 1:我在 Python 中有一个 SQLite3 连接。如何检查它是否已连接?我知道如果 sqlite3.connect() 失败,则会引发异常,但是如果我或某些人关闭了连接,我该如何检查并在必要时重新打开它?
问题 2:我可以在连接打开时移动文件系统中的文件(无法删除)。无论出于何种原因,数据库随后变为只读。如果我把它移回去,它就好像什么都没发生一样。有人可以解释一下吗?我应该在访问前检查 isfile(dbpath) 吗?