示例:在头文件中:
class Foo
{
static const int IntArray[];
};
Run Code Online (Sandbox Code Playgroud)
在源文件中:
constexpr int Foo::IntArray[] = { 1, 2, 3, 4 };
Run Code Online (Sandbox Code Playgroud)
这在g ++上编译,允许我将初始化列表放在源文件中而不是标题中.(如果它是头文件中的constexpr,则编译器需要在头文件中立即初始化).虽然仍允许在constexpr评估中使用该数组......
这是有效的,可移植的C++吗?
有没有人知道一个开源c ++应用程序与一个设计良好/强大的异常机制,所以我可以获得一些灵感?我看到的大多数代码/示例都有可疑的事情:
一些正确方向的指针将受到欢迎.
可能重复:
重复,常量和非常量,getter的优雅解决方案?
假设我有一个c ++类,其成员函数为const重载,如下所示:
Type* DoSomething();
const Type* DoSomething() const;
Run Code Online (Sandbox Code Playgroud)
如果这是一个更大,更复杂的成员,那么如何防止必须两次编写相同的代码?不能从const中调用任何非const函数.从非const中调用const版本会导致一个const指针必须被转换为非const(这有点像imo).
假设我有一个叫做的类AudioSample,实现不相关.AudioSamples可以从多个源加载,对于每个源,我从AudioSample派生一个类,为相关源添加相关的加载器代码.加载后,我通过将对象传递给AudioSample按值使用的函数来有目的地切片对象.
我似乎很好,它可以防止用各种加载函数污染基类,并防止我必须在必须添加新加载器时修改(经过试验和测试的)基类.
然而,当搜索stackoverflow进行对象切片时,我只找到将其描述为问题的答案并解释它的潜在缺陷,这让我想知道:我是否以某种方式使用它我不应该这样做?通过这样做我会遇到潜在的问题吗?我目前还没有意识到这一点?
我一遍又一遍地阅读,应该避免因为各种原因使用单身人士.我想知道如何正确处理类表示唯一系统资源的情况.例如,使用SDL的AudioOutput类.由于SDL_OpenAudio一次只能打开一次,因此有多个这种类型的对象没有任何意义,而且在我看来,防止意外制造多于一个对象实际上是好的.
只是想知道经验丰富的程序员对此有何想法,我还缺少另一种选择吗?
一个可以有独立的枚举类:
enum class StreamOpenMode
{
read,
write,
readWrite
};
class Stream
{
public:
Stream(StreamOpenMode openMode)
//...
};
Run Code Online (Sandbox Code Playgroud)
或将它们嵌套在另一个类中:
class Stream
{
public:
enum class OpenMode
{
read,
write,
readWrite
};
Stream(OpenMode openMode)
//...
};
Run Code Online (Sandbox Code Playgroud)
选择一个而不是另一个的技术原因是什么?例如,不能预先声明嵌套的品种,这可能导致大型项目中的循环依赖问题。
如果在将对象移至std :: vector时内存分配失败,并且抛出bad_alloc,std :: vector是否保证从对象移出的对象不变/仍然有效?
例如:
std::string str = "Hello, World!";
std::vector<std::string> vec;
vec.emplace_back(std::move(str));
/* Is str still valid and unaltered if the previous line throws? */
Run Code Online (Sandbox Code Playgroud)