我对这段代码中显示的情况感到有点困惑......
class DirEnt
{
public function PopulateDirectory($path)
{
/*... code ...*/
while ($file = readdir($folder))
{
is_dir($file) ? $dtype = DType::Folder : $dtype = Dtype::File;
$this->push_back(new SomeClass($file, $dtype));
}
/*... code ...*/
}
//Element inserter.
public function push_back($element)
{
//Insert the element.
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我需要使用$this->push_back(new SomeClass($file, $dtype))或 self::push_back(new SomeClass($file, $dtype))调用成员函数push_back?我似乎无法push_back(new SomeClass($file, $dtype))像我期望的那样访问它.我读过什么时候使用自我超过$ this?但它没有回答为什么我需要其中一个(或者如果我一直这样做,也许我搞砸了别的东西).
当成员是非静态成员并且在同一个类中时,为什么需要此规范?不应该从同一个类中的其他成员函数中看到并知道所有成员函数吗?
PS:它可以很好地工作$this->,self::但是当电话中没有这些功能时,这些功能都是未知的push_back.
我遇到了一些我继承的代码的情况......老实说,我相信代码写得正确,但这个错误似乎仍然存在.
我会很快注意到代码是从linux到LynxOS的交叉编译,我不确定这是否与错误有关.
基本上,在一个特定情况下:
try {
std::vector<ClassA> x = SomeGeneratingFunction();
//We get to here fine. X may be empty/unpopulated though.
if (x.size() < 1)
{
throw(MyException("It crashed."));
}
}
catch (MyException e)
{
//Handle it.
}
catch (...)
{
//Handle it.
}
Run Code Online (Sandbox Code Playgroud)
我们抛弃给定的向量是未填充的,但由于某种原因,抛出绕过catch子句 - 两者都是.它似乎只发生在这里 - 虽然我们通常不会形成一个if语句范围,但这应该是完全不相关的,因为它仍然在try范围内.
PS:下面的代码实际上是一个函数的内容,并且在调用函数时会出现异常,即使它们都应该由catch块处理.
任何想法如何可能?是的,这不是真正的代码/异常类,但异常类是你重写std :: exception的谷歌的简单例子,SomeGeneratingFunction()确实返回一个好的向量,即使它是空的.我不能提供真正的代码,但这是非常接近的,除非我可能已经把它写成了我的头脑.
提前感谢任何想法!
-w00te
我知道你可以读过数组的结尾 - 我现在想知道你是否可以通过执行读操作来解决错误.
int someints[100];
std::cerr << someints[100] << std::endl; //This is 1 past the end of the array.
Run Code Online (Sandbox Code Playgroud)
第二行真的可能导致段错误还是仅仅打印乱码?另外,如果我更改了那个内存,是否会导致该特定行上出现seg-fault ,或者只有当其他东西试图使用该意外更改的内存时才会发生故障?
我知道当一个进程没有很好地清理(它的资源没有被回收/收获)时就会创建一个僵尸.在调用fork()创建一个新进程后,父进程应始终在该进程上调用waitpid进行清理.
我还了解到,守护进程是通过分叉一个本身由fork创建的子进程创建的,然后让孩子死掉.显然,UNIX中的init进程(pid#1)将在您执行此操作后保留该进程.
我想知道的是 - 因为据我所知,当父母去世,它会自动清理孩子 - 那么,如何僵尸在第一时间拿到的地方产生的?
其次,守护进程的父进程会消失,为什么守护进程不被视为僵尸?
我有一个十六进制MAC地址保存在std :: string中.将该MAC地址转换为uint64_t中保存的整数类型的最佳方法是什么?
我知道stringstream,sprintf,atoi等.我实际上用前两个编写了很少的转换函数,但它们似乎比我想要的更加草率.
所以,有人能告诉我一个好的,干净的转换方式
std::string mac = "00:00:12:24:36:4f";
Run Code Online (Sandbox Code Playgroud)
进入uint64_t?
PS:我没有可用的boost/TR1设施,并且无法在实际使用代码的地方安装它们(这也是为什么我没有复制粘贴我的尝试之一,抱歉!).所以请保留直接C/C++调用的解决方案.如果您有一个有趣的UNIX系统调用解决方案,我也会感兴趣!
我看到人们在我使用的大量多线程,多进程应用程序系统的某些部分执行此操作.它似乎围绕调试行完成:
std::cerr << "DEBUG: Reaching: " << __FUNCTION__ << " @ " << __LINE__ << std::endl;
sleep(0);
Run Code Online (Sandbox Code Playgroud)
如果我宏睡了(0); (即将其更改为""),系统的调试输出似乎有不同的顺序(不太可预测),所以我认为它使得线路更快出来 - 但我认为std :: cerr是无缓冲的,并且std: :无论如何,endl调用std :: flush(),为什么会这样呢?
我正在阅读一本较旧的数据结构书,它说当你进行模板类编程时,你应该在.h文件的末尾包含.cpp.
据我所知,您必须在.h文件中为任何模板类成员函数执行完整的函数实现 - 这是由于模板编译器的工作方式.
我所教授的唯一功能可以放在模板类的实现文件中,模板专用功能即:template<> Class<Type>::function_name().
为什么这本书建议在.h结束时包含.cpp?这只是一种将实现分离到不同文件,同时让它们用标题编译的方法吗?如果是这样,你会在哪里放置真正的专业 - 我猜他们不能进入标题所包含的.cpp.
随着代码:
#include <iostream>
class A {};
class B { char x; };
int main()
{
std::cerr << sizeof(A) << " " << sizeof(B) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我知道要问一个空课的大小是一个常见的面试问题 - 我知道答案是一个.
我的问题是......在一个空类的"1"字节中保存了什么(我猜它是空的),编译器在内部做了什么来使它sizeof B与sizeof A这种情况相同?
我想完全理解它,而不仅仅是知道答案.
我正在为家庭作业制作一个小文件浏览器 - 我的工作和我需要的一样好,但我现在有点困惑处理PHP中的错误情况,因为我正在尝试重构我的编码.
我习惯了C++/C#try/catch错误处理,PHP似乎有一些变种.令我困惑的是这个:
resource opendir(string $ path [,resource $ context])
成功时返回目录句柄资源,失败时返回FALSE.
如果path不是有效目录或由于权限限制或文件系统错误而无法打开目录,则opendir()将返回FALSE并生成级别为E_WARNING的PHP错误.您可以通过在函数名称的前面加上"@"来抑制opendir()的错误输出.
来自http://php.net/manual/en/function.opendir.php.
我是否需要捕获那里提到的级别E_WARNING生成的PHP错误,还是愚蠢的?我不明白为什么它会返回false并抛出一个错误 - 不应该抛出错误使它无论如何都不能正常返回?
我想将一个静态分配的多维数组分配给一个临时变量.请考虑以下示例:
void foo(int b[3][2])
{
b[1][1] = 1; // no segmentation fault
}
int main()
{
int a[3][2] = {{1, 2}, {11, 12}, {21, 22}};
foo(a);
int** c;
c = (int**)&a;
c[1][1] = 1; // segmentation fault on execution
int* d[3];
d[0] = (int*)&(a[0]);
d[1] = (int*)&(a[1]);
d[2] = (int*)&(a[2]);
d[1][1] = 1; // no segmentation fault
return 0;
}
Run Code Online (Sandbox Code Playgroud)
基本上我想要做的编译器与参数什么b的foo().但我能提出的唯一可行的解决方案是d.有没有那么复杂的方式?