小编Mat*_*lia的帖子

将C int数组重置为零:最快的方法?

假设我们有一个T myarray[100]带有T = int,unsigned int,long long int或unsigned long long int,将所有内容重置为零的最快方法是什么(不仅用于初始化,而且在我的程序中多次重置内容) ?也许有memset?

像动态数组一样的问题T *myarray = new T[100].

c c++ arrays memset

92
推荐指数
4
解决办法
14万
查看次数

为什么C++ 11包含一个关于比较void指针的奇怪子句?

在检查另一个问题的引用时,我注意到C++ 11中的一个奇数子句,在[expr.rel]3:

指针void(后指针转化)可以进行比较,以确定其结果如下:如果两个指针表示相同的地址或均为空指针值,其结果是true,如果操作者 <=>=false其他方式; 否则结果未指定.

这似乎意味着,一旦两个指针被投入void *,它们的排序关系就不再有保证; 例如,这个:

int foo[] = {1, 2, 3, 4, 5};
void *a = &foo[0];
void *b = &foo[1];
std::cout<<(a < b);
Run Code Online (Sandbox Code Playgroud)

似乎没有具体说明.

有趣的是,这个子句在C++ 03中不存在并且在C++ 14中消失了,所以如果我们采用上面的例子并应用C++ 14的措辞,我会说3.1

  • 如果两个指针指向同一数组的不同元素或其子对象,则指向具有较高下标的元素的指针比较大.

将应用,作为ab指向同一数组的元素,即使它们已被转换为void *.请注意,3.1的措辞在C++ 11中几乎完全相同,但似乎被该void *子句覆盖了.

我的理解是对的吗?在C++ 11中添加并立即删除的奇怪子句有什么意义?或者它可能仍然存在,但是被标准的其他部分移动/隐含?

c++ pointers comparison-operators language-lawyer c++11

58
推荐指数
1
解决办法
2978
查看次数

C中的NULL是否需要/定义为零?

在我的GCC测试程序中,NULL似乎为零,但维基百科说NULL只需指向无法寻址的内存.

有没有编译器NULL非零?我很好奇是否if (ptr == NULL) 更好的做法if (!ptr).

c null

49
推荐指数
2
解决办法
1943
查看次数

"volatile"关键字出现在数组下标中的目的是什么?

当我浏览cppreference时,我在函数参数中看到了一个奇怪的类型数组,如下所示:

void f(double x[volatile], const double y[volatile]);
Run Code Online (Sandbox Code Playgroud)

那么,volatile关键字出现在数组下标中的目的是什么?它有什么作用?

c arrays volatile function-parameter

43
推荐指数
2
解决办法
1722
查看次数

如何将C程序拆分成多个文件?

我想在两个单独的.c文件中编写我的C函数,并使用我的IDE(Code :: Blocks)将所有内容编译在一起.

如何在Code :: Blocks中设置它?

如何.c从另一个文件中调用一个文件中的函数?

c codeblocks

41
推荐指数
1
解决办法
8万
查看次数

声明/定义为C和C++中的语句

当这不能在C中编译时我很困惑:

int main()
{
    for (int i = 0; i < 4; ++i)
        int a = 5; // A dependent statement may not be declaration

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我已经习惯了将要编译的C++.我只是愣了一会儿,直到我记得这里的答案是关于如何在C和C++中将不同的东西视为"陈述".这是关于switch语句的.for循环括号后面的"语句"必须同时出现在C和C++中.这可以在添加分号或创建{}波浪形支架块的情况下完成.

在C++中"int a = 7;" 被视为声明,定义和初始化.CI认为它也被认为是所有这些,但在C中它不被视为"声明".

有人可以准确地澄清为什么在C中这不是一个陈述,而在C++中它是?这让我对一个陈述的概念感到困惑,因为一种语言说的是,而另一种语言则说不是,所以我有点困惑.

c c++ if-statement language-lawyer

38
推荐指数
3
解决办法
2673
查看次数

为什么每个perl包的末尾都有1个?

如果你忘记了软件包末尾的1,Perl会告诉你"软件包没有返回真值".好吧,如果它知道你忘了它,为什么不把它放在那里呢?

perl perl-module return-value

35
推荐指数
2
解决办法
2万
查看次数

明确选择复制分配

在C++ 11中,如果复制和移动赋值都可用,则编译器会在参数为左值时自动选择复制赋值,如果是左值则移动赋值.使用std::move它可以明确地选择左值的移动分配.但是如何明确选择rvalue的复制赋值呢?

代码示例:

#include <iostream>

class testClass
{
public:
    testClass &operator=(const int &other) {
        std::cout << "Copy assignment chosen." << std::endl;
        return *this;
    }

    testClass &operator=(int &&other) {
        std::cout << "Move assignment chosen." << std::endl;
        return *this;
    }   
};  

int main(int argc, char *argv[])
{
    int a = 4;
    testClass test;

    test = a; // Selects copy assignment
    test = 3; // Selects move assignment

    test = std::move(a); // Selects move assignment
//  test = std::copy(3); // <--- …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

30
推荐指数
2
解决办法
1501
查看次数

如何使用Rundll32执行DLL函数?

使用ShellExecute文档作为参考:

我从命令行运行以下命令:

C:\>RUNDLL32.EXE SHELL32.DLL,ShellExecute handle,"open","C:\Documents and Settings\admin\Desktop\tmp",NULL,NULL,SW_SHOWNORMAL
Run Code Online (Sandbox Code Playgroud)

这会导致异常错误.

我不知道这意味着什么:

HINSTANCE ShellExecute(
  __in_opt  HWND hwnd,
  __in_opt  LPCTSTR lpOperation,
  __in      LPCTSTR lpFile,
  __in_opt  LPCTSTR lpParameters,
  __in_opt  LPCTSTR lpDirectory,
  __in      INT nShowCmd
);
Run Code Online (Sandbox Code Playgroud)

但是在描述中,提到了句柄(HWND)和指向以空字符结尾的字符串(LPCTSTR)的指针,但它非常混乱.

任何帮助将不胜感激.我还想了解更多,所以任何参考(书籍,网络链接等)也会很棒!

rundll32

28
推荐指数
1
解决办法
5万
查看次数

Pythonic为类所拥有的对象组成上下文管理器的方法

对于某些任务,通常需要多个具有明确释放资源的对象 - 例如,两个文件; 当任务是使用嵌套with块的函数的本地任务时,这很容易完成,或者 - 甚至更好 - with具有多个with_item子句的单个块:

with open('in.txt', 'r') as i, open('out.txt', 'w') as o:
    # do stuff
Run Code Online (Sandbox Code Playgroud)

OTOH,当这些对象不仅仅是函数作用域的本地对象,而是由类实例拥有 - 换句话说,上下文管理器如何构成时,我仍然很难理解它应该如何工作.

理想情况下,我想做的事情如下:

class Foo:
    def __init__(self, in_file_name, out_file_name):
        self.i = WITH(open(in_file_name, 'r'))
        self.o = WITH(open(out_file_name, 'w'))
Run Code Online (Sandbox Code Playgroud)

并有Foo自己变成上下文管理,处理io,这样,当我做

with Foo('in.txt', 'out.txt') as f:
    # do stuff
Run Code Online (Sandbox Code Playgroud)

self.iself.o按照您的预期自动处理.

我修改了写东西,比如:

class Foo:
    def __init__(self, in_file_name, out_file_name):
        self.i = open(in_file_name, 'r').__enter__()
        self.o = open(out_file_name, 'w').__enter__()

    def __enter__(self):
        return …
Run Code Online (Sandbox Code Playgroud)

python contextmanager

23
推荐指数
4
解决办法
937
查看次数