关于将数组传递给函数的最佳实践,我有一个广泛的问题.
所以在过去我用C编程时我想要一个函数让它的输入是一个数组,我会声明函数输入参数是一个指针.这工作得相当好.
但是,我开始用C++编写更多内容,并试图确定将数组传递给函数的最佳实践.所以我注意到在C++中通过引用传递对象是很流行的,这样可以避免昂贵的复制操作.但是,当我谷歌将数组传递给函数时,我读到的语句表明数组是通过引用自动传递的......那么这个问题是什么呢?为什么数组会通过引用自动传递?让我们说我不希望函数修改数组,是否可以传递const数组?
我很难将我的测试程序编译好.所以我很好奇是否有人能解释将数组传递给C++中的函数意味着什么以及它与C的不同之处
谢谢!
我对C++比较陌生.我刚刚阅读了关于类型推导的auto关键字.我试过在几个函数中实现它只是为了发现它在处理数学运算符时引起了各种各样的问题.我相信发生的事情是当我实际需要浮点除法(变量'i'和'avg')时,我的函数开始实现整数除法.我使用下面的自动关键字发布了代码.
现在,当我明确地将变量声明为浮点数时,函数运行正常.
这是一个使用auto不首选的例子吗?但是,我肯定会发现它们在生成迭代器时会有所帮助.
namespace Probability
{
/* ExpectedValueDataSet - Calculates the expected value of a data set */
template <typename T, std::size_t N>
double ExpectedValueDataSet(const std::array<T, N>& data)
{
auto i = 0;
auto avg = 0;
for(auto it = data.begin(); it != data.end(); it++)
{
i = it - data.begin() + 1;
avg = ((i-1)/i)*avg + (*it)/i;
}
std::cout << avg << " \n";
return avg;
}
};
Run Code Online (Sandbox Code Playgroud) 我在Qt创作者工作,有点困惑.当我在Qt Designer中生成UI文件时,我注意到在cpp文件中加载了一个名为ui_ filename的关联头文件.关于如何生成此标头,我有点困惑.请参考下图.该文件特别是"ui_mainwindow.h".此文件正在自动生成.
有没有办法查看此头文件的内容
谢谢
我最近遇到过"多传递编译器"这个术语.从本质上讲,任何编译器都可以通过多次传递来解析源代码.
让我想一想,C预处理器多通道运行吗?
假设我有以下C代码.
int bar = foo;
#define foo 1
Run Code Online (Sandbox Code Playgroud)
在传递过程中唯一可行的方法是,如果预处理器一直在寻找预处理器指令的代码,然后返回代码来进行替换.
这是预处理器的功能吗?
在C++中声明结构有没有优势?为什么我不应该只创建一个只包含数据成员的类(即没有方法)?
谢谢,
我很难理解C++ std :: size_t数据类型的用处.我意识到这种数据类型是依赖于平台的,并且应该意味着使代码更具可移植性.但是,它似乎并没有解决所有问题.
比方说,我正在使用32位int的机器.假设我决定编写这台机器的交流式功能,它只是将字节从一个对象复制到另一个对象.在此函数中,memcpy函数用于将数据从object2写入object1.我选择了一个任意大的数字.
void writeBytes(obj *pobj1, obj *pobj2)
{
memcpy(pobj1, pobj2, 1048575);
}
Run Code Online (Sandbox Code Playgroud)
这段代码应该(希望)编译得很好.因为memcpy在其声明中使用size_t,并且因为此平台上的size_t应该是32位,所以1048575的数量应该可以正常工作.
但现在让我说我决定将此功能移植到16位整数的机器上.现在,memcpy函数将size_t解释为大小为16.在这种情况下,1048575超出了为memcpy声明的允许值.然后代码无法编译.
所以我的问题是:在这种情况下size_t究竟有用吗?它是如何使我们的代码更具可移植性的?
我确定这个问题的答案是在互联网上的某个地方(甚至是stackoverflow),然而,我很难设计问题以获得好的结果.
我上周一直在研究x86,并且对x86处理器"了解"不同进程运行的概念感到困惑.例如,在受保护模式下运行时,x86处理器能够限制进程可以访问的内存.这让我相信处理器在某种程度上意识到存在多个进程.
这让我很困惑.从处理器的角度来看,我认为它只是获取要执行的指令列表,操作系统负责订购这些指令(通过时间片,内存管理等),以便可以运行多个进程.从处理器的角度来看,我认为所有它都会看到一个顺序的指令列表.
但是,由于x86处理器可以通过进程限制内存访问,因此CPU会以某种方式意识到存在多个进程.
假设我有一个对象的std :: array并创建一个指向其中一个对象的指针.
std::array<Object, 100> my_array;
Object* ptr_object = &my_array[50];
Run Code Online (Sandbox Code Playgroud)
所以假设我不知道ptr_object引用的索引,我将如何在C++ 11中查找和索引这个索引?
我发现一些读数表明std :: distance可能会有所帮助,但是,我的尝试
std::distance(my_array, ptr_object);
Run Code Online (Sandbox Code Playgroud)
抛出错误,指出"找不到匹配的重载函数".
我有一个名为“库”的仓库。这个 repo 包含我的项目(例如数学、显示等)的多个库文件,它们彼此相对独立。当时,创建单个存储库似乎更容易,而不是为每个单独的库文件创建存储库。
但是,我现在遇到了标记这些文件的问题。在 Git 中标记本质上标记了整个 repo,这会给我留下一个 repo 库版本。但是,我对单独标记文件感兴趣,以便其他项目可以引用特定版本(例如 math 1.0、display 1.1 等)
将每个文件分解到它自己的存储库中的唯一解决方案是每个文件都可以用特定版本进行标记吗?然而,为每个文件都有一个 repo 似乎很浪费。
我有一个关于C++结构和指针的问题.
所以我想说我定义了一个名为'info'的结构.这个结构有一个名为'state'的成员.
现在假设我声明了一个'info'的实例,然后我声明了一个'info'类型的指针.如果我只想使用指针,我将如何取消引用结构,以便我可以修改'state'的值?
例如:
info instance;
info * pointer = &instance;
//Want to change the value of 'state' to 23
*pointer.state = 23;
// or
*(pointer).state = 23;
// or
*(info.currentState) = 23;
Run Code Online (Sandbox Code Playgroud)
这两种情况都会起作用吗?