我理解为一堂课
class A {
const int myint;
public:
A (const int yourint);
A (const std::string yourstring);
};
Run Code Online (Sandbox Code Playgroud)
我可以myint在初始化列表中初始化,如下所示:
A::A (const int yourint) : myint (yourint) {};
Run Code Online (Sandbox Code Playgroud)
但是,myint如果计算它所需的数据来自字符串并且可能涉及计算,那么从第二个构造函数初始化的正确方法是什么?
我有一个Grray的GValue(全部为非零),它已在运行时使用g_array_append_val分配.我想知道如何才能找出最后一个元素的索引是什么,或者更确切地说是数组所包含的元素数量.代码就像
for (length=0;g_value_get_int(&g_array_index(array, GValue, length)); length++);
return length
Run Code Online (Sandbox Code Playgroud)
会因为出界而失败.
我有一张看起来像这样的桌子
| ID | item1 | item 2 |
| 1 | A1 | B1 |
| 2 | A2 | B2 |
Run Code Online (Sandbox Code Playgroud)
我希望得到这样的东西:
| ID | item |
| 1 | A1 |
| 1 | B1 |
| 2 | A2 |
| 2 | B2 |
Run Code Online (Sandbox Code Playgroud)
在某种意义上,它与这个SO问题相反.
std::vector和std::array存储在存储器的连续块他们的数据。假设我有
class T; // A movable class
T t;
std::vector<T> vec;
vec.push_back(t);
std::array<T,1> arr;
Run Code Online (Sandbox Code Playgroud)
假设如上所述,我保证知道vec并且arr具有相同的长度。有没有一种方法可以让我移动 vec到array而不是用 复制它std::copy(vec.begin(), vec.end(), arr.begin())?
以下代码编译并正常工作:
#include<iostream>
class Base {
protected:
int _a;
public:
virtual ~Base()=default;
Base(int a) : _a{a} {};
int getit() const { return _a; }
};
class Derived : public Base {
public:
Derived(int a) : Base{a} {};
int get2() const { return 2*this->_a; }
};
int main() {
Base D{2};
auto* ptr = &D;
auto* ptr2 = static_cast<Derived*>(ptr);
std::cout << ptr2->get2() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输出
4
Run Code Online (Sandbox Code Playgroud)
如果我改变static_cast了dynamic_cast它出现segfaults。
我的问题:
使用static_cast强制转换为不添加任何数据成员的派生类是否安全?
c++ ×3
c ×1
class ×1
const ×1
constructor ×1
dynamic-cast ×1
glib ×1
mysql ×1
row ×1
sql ×1
static-cast ×1