假设我有两个代码示例用于创建10个元素的整数数组:
int *pi = (int*)0;
realloc(pi,10);
Run Code Online (Sandbox Code Playgroud)
另一个是正常写的,即:
int *pi;
pi= malloc(10*sizeof(int));
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是:第一种类型的转让是合法的,但没有使用.为什么,虽然我可能会得到我选择的起始位置?使用常量的指针的初始化是合法的但不使用.为什么?
我想设置一个函数(或lambda函数)的调用,以便在当前线程退出时自动发生,但std::thread除非我接管线程创建的整个任务或手动确保,否则我看不到任何可行的方法.每个线程调用一些我总是提供的特定函数作为它的最后一个操作.
基本上,我想要的功能,其原型可能类似于这样的东西:
on_thread_exit(const std::function<void()> &func);
Run Code Online (Sandbox Code Playgroud)
当调用on_thread_exit的线程最终终止时,将执行必要的设置以确保自动调用给定函数,并且不需要在创建线程或终止时显式调用任何特定函数.
手动我可以创建一个std::vector<int>::iterator像这样的对象:
std::vector<int>::iterator i;
Run Code Online (Sandbox Code Playgroud)
所以这std::vector<int>::iterator是一种类型.但是当我写一个函数时:
template <class T>
std::vector<T>::iterator foo(std::vector<int>::iterator i)
{
return i;
}
Run Code Online (Sandbox Code Playgroud)
编译器显示警告:
std::vector<T>::iterator' : is a dependent name not a type
Run Code Online (Sandbox Code Playgroud)
并且代码不会编译.但是如果在main中我调用这样的函数:
int main()
{
vector<int> v;
foo(v.begin());
}
Run Code Online (Sandbox Code Playgroud)
T应该解析该参数.那为什么编译器显示错误?
我对java很陌生。假设我有一个 xml 解析器,我会从中创建对象。在 C# 中,我会这样做:
parser p = new parser(typeof(myTargetObjectType));
Run Code Online (Sandbox Code Playgroud)
在我的解析器类中,我需要知道我正在制作哪个对象,以便在无法解析时抛出异常。如何在 java 中做同样的事情?我的意思是我如何接受这样的论点typeof(myObject)
我知道每种语言都有自己的做事方式。我在问java有什么方法
在c ++标准库中,几乎所有算法函数都将可调用对象作为参数.现在我想用我的程序尝试这个东西.我开了头的功能类似find_if或search_n(),但不能太了解如何把这些调用对象的参数进行处理和关闭过程参数是如何传递给它们特别适用于拉姆达对象(可bind()用于lambda表达式,我不知道)
谁能解释我这件事是如何运作的.提前致谢
我是并发新手,我对此表示怀疑std::mutex.说我有一个int; 书籍告诉我要宣布互斥; 获得对a的独占访问权限.现在我的问题是互斥对象如何识别它必须保护哪些关键资源?我的意思是哪个变量?说我有两个变量int a,b; 现在我宣布互斥量为abmut; 现在abmut会保护什么??? 既a又b或只有a或b ???
我正在动态创建线程:
auto thr =new std::future<void>(std::async(/*some callable*/));
Run Code Online (Sandbox Code Playgroud)
我将所有这些指针存储在一个std::vector<future<void>*>.为了释放内存,我正在做:
for(int i(0);i<futureVector.size();i++)
{
if(futureVector.at(i)->valid())
{
futureVector.at(i)->get(); // for getting exception,if any
}
delete futureVector.at(i); // the problem is here
}
Run Code Online (Sandbox Code Playgroud)
现在在我的代码中,可能会发生futureVector.at(i)已分配的内存已被释放(可能在某些其他线程中,可能由某些其他函数).我的问题是如何检测指针futureVector.at(i)是否有效?我是否指出有效std::future与否?
注意:futureVector变量是我的类的静态成员.
假如我不删除该future对象的成本非常大(已检索到的未来)
说我上课了
class A{
A& operator+ (size_t ofst)
{
//some calculation
//return
}
};
Run Code Online (Sandbox Code Playgroud)
在这里,我不能写
return this;
Run Code Online (Sandbox Code Playgroud)
因为A*无法转换为A&.那么如何实现这个呢?我想返回引用而不是指针.
作为类比,有一个流类的>>或<<运算符.据我所知,这两个返回对自身的引用.标准库如何实现这一目标?
我声明了字符串数组,string pdts[10];但是我收到了声明语法错误.我已经收到了相同的错误.请帮我解决.我的代码是
#include<iostream.h>
#include<string.h>
string pdts[10];
Run Code Online (Sandbox Code Playgroud)