如何检测成员函数是否具有const修饰符?
考虑一下代码
struct A {
int member();
int member() const;
};
typedef int (A::*PtrToMember)();
typedef int (A::*PtrToConstMember)() const;
Run Code Online (Sandbox Code Playgroud)
我需要这样的东西:
std::is_const<PtrToMember>::value // evaluating to false
std::is_const<PtrToConstMember>::value // evaluating to true
Run Code Online (Sandbox Code Playgroud) 我们如何为包裹的项目赋值std::reference_wrapper?
int a[] = {0, 1, 2, 3, 4};
std::vector <std::reference_wrapper<int>> v(a, a+5);
v[0] = 1234; // Error, can not assign value !
Run Code Online (Sandbox Code Playgroud)
根据错误,删除直接分配:
错误:使用已删除的函数'std :: reference_wrapper <_Tp> :: reference_wrapper(_Tp &&)[with _Tp = int]'
我在cplusplus.com上读到,std::map通过将迭代器作为参数传递来删除a中元素的操作是常量时间.
如果我没有错(如果我是,请纠正我)迭代器基本上是指向地图中元素的指针,++运算符只返回当前元素的有序后继,我猜这是如何在遍历时实现排序结果std::map.
现在如果地图是一棵红黑树,不应该删除一个元素(使用它的地址)是对数时间操作,我不知道他们是如何在恒定时间内完成的(除非存在高度内存浪费的替代方法) .
当我研究一些与内存泄漏相关的东西时,我偶然发现了这个问题.
int* Function()
{
int arrays[10];
/* Some code here */
return &(arrays[0]);
}
Run Code Online (Sandbox Code Playgroud)
作者说上面的代码是有效的,但是返回的内存将被你调用的下一个函数重用,因此相同的内存将用于两个目的.这被称为"悬挂参考"并且可能导致可怕的间歇性故障,或者是老式的"一般保护故障".
如果有人能解释什么是"悬挂参考"和"一般保护错误",那将是很好的
我正在考虑将boost_log用于一个项目,并且在开始时我遇到了以下问题.
我发现的Boost日志示例:http://www.boost.org/doc/libs/1_54_0/libs/log/example/doc/tutorial_file.cpp无法编译.其他更简单的例子(没有接收器)我编译没有问题.
g++ -std=c++11 boost_log_sinks.cpp -DBOOST_LOG_DYN_LINK -lboost_log -lpthread
Run Code Online (Sandbox Code Playgroud)
/ usr/bin/ld:/tmp/ccApJdsi.o:对符号'_ZN5boost6detail12get_tss_dataEPKv'的未定义引用//usr/lib/x86_64-linux-gnu/libboost_thread.so.1.54.0:添加符号时出错:命令行中缺少DSO collect2:错误:ld返回1退出状态
我正在研究Ubuntu14.04我的g ++版本是g ++(Ubuntu 4.8.2-19ubuntu1)4.8.2
有人知道为什么会这样吗?
在尝试了Perl和一点C之后,我正在尝试学习C++,并且我已经陷入了细节和陷阱.考虑一下: -
int x = 1;
{
int x = x; // garbage value of x
}
int const arr = 3;
{
int arr[arr]; // i am told this is perfectly valid and declares an array of 3 ints !!
}
Run Code Online (Sandbox Code Playgroud)
嗯,为什么区别?
澄清:使用相同的名称在一种情况下有效,在另一种情况下无效.
有时当我用C++编程时,我希望undefined每个变量都有一个像Javascript!的值.例如,当我为数组的越界元素返回一个值时,返回an undefined而不是抛出异常是有用的,或者:
template <typename T, int SIZE>
class MyArray
{
T arr[SIZE];
static T badref;
public:
T &operator[](int i)
{
if (i >=0 && i < SIZE)
return arr[i];
else
throw std::string("OUT-OF-BOUNDS"); // or: return badref; !!
}
};
Run Code Online (Sandbox Code Playgroud)
另一个脏(在我看来)选项是将pre-defind变量的引用作为坏引用变量返回.我知道我们不能null为参考变量分配或类似的东西.
是否有另一个格式良好的模式返回一个引用,其中调用者能够找出返回的值无效?
编辑:我不是故意的pointer
可以说变量和常量是数据类型的对象吗?
我想知道对此有什么正确的解释
int a;
float f;
Run Code Online (Sandbox Code Playgroud)
在这里,我们可以说a是类型的对象int,并f为类型的对象float?
写一般的最小函数,我想到了两个问题.代码适用于任何输入类型和不同的参数号:
namespace xyz
{
template <typename T1, typename T2>
auto min(const T1 &a, const T2 &b) -> decltype(a+b)
{
return a < b ? a : b;
}
template <typename T1, typename T2, typename ... Args>
auto min(const T1 &a, const T2 &b, Args ... args) -> decltype(a+b)
{
return min(min(a, b), args...);
}
}
int main()
{
cout << xyz::min(4, 5.8f, 3, 1.8, 3, 1.1, 9) << endl;
// ^ ^ ^
// | | |
// float double …Run Code Online (Sandbox Code Playgroud) 使用Qt-5.0,我有这个JSON字符串
{"type":"FILE"}
Run Code Online (Sandbox Code Playgroud)
我希望fromBinaryData接受.toLocal8Bit()字符串作为有效格式,但事实并非如此.
QString j = "{\"type\":\"FILE\"}";
auto doc = QJsonDocument::fromBinaryData(j.toLocal8Bit());
doc.isNull() // It's true, means the entry is not valid
Run Code Online (Sandbox Code Playgroud)
我错过了什么?