小编Arm*_*yan的帖子

是否在内联系中定义的友元函数是否内联?

如果在类中定义了成员函数,则它是内联函数.例如

struct X
{
   void mem_f() {} //mem_f is inline
};
Run Code Online (Sandbox Code Playgroud)

我的问题是在类中定义的非成员友元函数是否也是自动内联的.

例如

struct Y
{ 
   friend void friend_f() {} //is friend_f inline?
};
Run Code Online (Sandbox Code Playgroud)

标准中的相关引用/ paragraph_no将非常受欢迎.谢谢.

c++ inline friend

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

引用不同配置的不同程序集

在询问之前,我读了这个这个线程.没有帮助.

我正在使用Visual Studio 2003(这是我的雇主强制要求的)但我想对VS的更高版本的答案也可能有用.

所以,想象一下我有两个.Net项目:A - 这是一个类库,B - 是一个应用程序.在BI中单击Add Reference,转到Projects选项卡并选择A.在这种情况下,B的调试版本将引用A的调试版本,B的发行版本将使用A的发行版本.现在想象而不是项目AI只有两个程序集 - aD.dll和a.dll.我没有任何创建这些的项目.我想要做的是强制执行B引用aD.dll的Debug版本,以及B引用a.dll的发布版本
问题1:我该怎么做?

当我想引用一些dll时,我去添加引用 - > 浏览并浏览我的dll.但我需要指定的不是完整路径,而是相对路径.
问题2:我该怎么做?

这是一个紧急情况,提前谢谢:)

.net c# reference visual-studio

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

如果它不纯,会使用虚拟成员函数吗?

C++03 3.2.2 ...如果对象或非重载函数的名称出现在可能已评估的表达式中,则使用该函数.如果它不是纯粹的,则使用虚拟成员函数...

然后3.2.3我们得到:每个程序应该只包含该程序中使用的每个非内联函数或对象的一个​​定义; 无需诊断.该定义可以在程序中明确显示,可以在标准或用户定义的库中找到,或者(在适当的时候)隐式定义(见12.1,12.4和12.8).内联函数应在每个使用它的翻译单元中定义.

我正在阅读的内容:不使用纯虚函数.ODR仅适用于使用的功能.这不意味着以下是合法的吗?我猜答案是否定的,但事实并非如此,我无法理解为什么.

//x.h
struct A
{
   virtual void f() = 0;
};

//y.cpp
#include "x.h"
void A::f()
{
}

//z.cpp
#include "x.h"
#include <iostream>
void A::f()
{
   std::cout << "Hello" << std::endl;
}

//main.cpp
#include "x.h"
struct B:A
{
   virtual void f()
   {
      A::f();
   }
};

int main()
{
   A* p = new B;
   p->f();
}
Run Code Online (Sandbox Code Playgroud)

c++ pure-virtual one-definition-rule language-lawyer

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

WaitForSingleObject在等待超时时间为零时会导致上下文切换吗?

在等待超时时间为零的事件时,是否会WaitForSingleObject(或WaitForMultipleObjects)导致上下文切换?(Sleep(0)据我所知,会立即产生一个线程时间片.)

现在,关于WaitForSingle|MultipleObject和事件处理.如果WaitFor*Object实际上需要等待,它显然会产生剩余的时间片.然而,有两种情况API并没有需要等待:

  • 要么发出事件信号,在这种情况下它可以返回 WAIT_OBJECT_0
  • 或者事件的状态无关紧要,因为我指定等待时间为零,在这种情况下,它可以立即返回,或者使用WAIT_OBJECT_0WAIT_TIMEOUT

现在,鉴于此,WaitForSingleObject如果提供超时时间为零,将导致线程上下文切换?

c++ windows winapi multithreading

8
推荐指数
2
解决办法
1899
查看次数

undefined reference uuid_generate ubuntu

我使用下面的命令安装了libuuid.

sudo apt-get install uuid-dev
Run Code Online (Sandbox Code Playgroud)

并从终端正确安装.

然后,我包括<uuid/uuid.h>头文件.但是当调用函数uuid-generate时,它会给出引用错误

  uuid_t newUUID;
  uuid_generate(newUUID);
Run Code Online (Sandbox Code Playgroud)

ubuntu uuid

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

C和C++之间的关系

当Stroustroup设计C++时,他的目标之一就是C++尽可能地成为C的超集.我知道这不是100%的情况,但C中的大多数优秀代码也是C++代码.

但我听说C99支持C++没有的许多东西(比如VLA),甚至还有C1x或C0x,无论它叫什么.那么,C++是 C89 的超集,从那时起C和C++几乎是独立开发的?

c c++ compatibility

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

模板参数作为朋友

在C++ 03中,以下是非法的,尽管有些编译器支持它.

template <class T>
class X
{
    friend T;
};
Run Code Online (Sandbox Code Playgroud)

这是否已在C++ 11中合法化?(抱歉,我没有时间自己阅读草稿,只是希望有人知道这一点)

c++ templates friend c++11

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

将char []数组转换为String

假设我有一个数组:

char[] chars={'X','X','m','a','t','t','X','X'};
Run Code Online (Sandbox Code Playgroud)

我想创建值为"matt"的String,所以从字符索引2到5开始.是否有内置方法来实现这一点,或者我必须进行循环?

java arrays

8
推荐指数
2
解决办法
407
查看次数

找到[a,b]范围内不在给定std :: set S中的所有数字

ab是整数,a < b.给定一个std::set<int> S什么是有效的优雅的(最好是没有明确的循环)的方式来查找和存储(成vector)都从数字[a, b]中不是S.

解决方案1:

 vector<int> v;
 for(int i = a; i <= b; ++i)
 {
     if(S.find(i) == S.end())
     {
        v.push_back(i);
     }         
}
Run Code Online (Sandbox Code Playgroud)

解决方案2:

从推动所有的数字abset和使用std::set_difference

Solution1包含一个显式循环,而solution2似乎效率不高(至少在内存方面).你会建议什么?我正在寻找一种优雅的STL-ish(提升也是可以接受的)惯用的方式来做到这一点.

c++ algorithm stl set

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

从int到vector的隐式转换?

vector<T>有一个构造函数,它采用向量的大小,据我所知它是显式的,这可以通过以下代码无法编译的事实证明

void f(std::vector<int> v);
int main()
{
    f(5);
}
Run Code Online (Sandbox Code Playgroud)

我无法理解并要求您解释的是以下代码编译的原因

std::vector<std::vector<int>> graph(5, 5);
Run Code Online (Sandbox Code Playgroud)

它不仅编译,它实际上将图形调整为5并将每个元素设置为五个零的向量,即与我通常编写的代码相同:

std::vector<std::vector<int>> graph(5, std::vector<int>(5));
Run Code Online (Sandbox Code Playgroud)

怎么样?为什么?

编译器:MSVC10.0


好吧,似乎这是一个MSVC错误(还有一个).如果有人可以在答案中详细说明错误(即总结复制的情况),我很乐意接受

c++ vector type-conversion explicit-constructor visual-studio

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