小编Jam*_*lis的帖子

在给定位置的情况下如何获得列表中的某个元素?

所以我有一个清单:

list<Object> myList;
myList.push_back(Object myObject);
Run Code Online (Sandbox Code Playgroud)

我不确定,但我相信这将是数组中的"第0个"元素.是否有任何我可以使用的函数将返回"myObject"?

Object copy = myList.find_element(0);
Run Code Online (Sandbox Code Playgroud)

c++ stl list

86
推荐指数
3
解决办法
26万
查看次数

Visual Studio 2010的奇怪"警告LNK4042"

我刚刚被Visual Studio 2010(C++)发出的一些非平凡的警告殴打(而不是很难).

编译给出了以下输出:

1 Debug\is.obj:警告LNK4042:对象指定多次; 附加项忽略
1 Debug\make.obj:警告LNK4042:对象指定多次; extras忽略
1 Debug\view.obj:警告LNK4042:对象指定多次; extras忽略
1 identity.obj:错误LNK2019:未解析的外部符号void __cdecl test::identity::view(void)(?view @ identity @ test @@ YAXXZ)在函数中引用void __cdecl test::identity::identity(void)(?identity @ 0test @@ YAXXZ)
1 identity.obj:错误LNK2019:未解析的外部符号void __cdecl test::identity::make(void)(?make @ identity @ test @@ YAXXZ)在函数中引用void __cdecl test::identity::identity(void)(?identity @ 0test @@ YAXXZ)
1 range.obj:错误LNK2019:未解析的外部符号void __cdecl test::range::is(void)(?是@ range @ test @@ YAXXZ)在函数中引用void __cdecl test::range::range(void)(?range @ 0test @@ YAXXZ)

链接器错误总是很难调试...但是有未解决的引用,所以我检查了......但是源代码是格式良好的......最后它击中了我:

我的文件夹层次结构如下:

src/
  identity/
    is.cpp
    make.cpp
    view.cpp
  range/ …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio-2010 visual-studio visual-c++ visual-c++-2010

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

Lambda的显式返回类型

当我尝试编译此代码(VS2010)时,我收到以下错误: error C3499: a lambda that has been specified to have a void return type cannot return a value

void DataFile::removeComments()
{
  string::const_iterator start, end;
  boost::regex expression("^\\s?#");
  boost::match_results<std::string::const_iterator> what;
  boost::match_flag_type flags = boost::match_default;
  // Look for lines that either start with a hash (#)
  // or have nothing but white-space preceeding the hash symbol
  remove_if(rawLines.begin(), rawLines.end(), [&expression, &start, &end, &what, &flags](const string& line)
  {
    start = line.begin();
    end = line.end();
    bool temp = boost::regex_search(start, end, what, expression, flags);
    return temp; …
Run Code Online (Sandbox Code Playgroud)

c++ lambda visual-c++ c++11 visual-c++-2012

74
推荐指数
3
解决办法
9万
查看次数

一个接口是否应继承另一个接口

我似乎无法找到答案,只是想确保它是一个好的编码标准.我有接口A,它被许多不同的类使用,并且不希望接口A发生变化.我遇到了一个新的需求,它要求许多实现接口A的类需要枚举,但并不是所有的类都需要这个枚举.我不希望不需要这个新枚举的类来实现这个新功能.所以我创建了包含我需要添加的新枚举的接口B. 然后我创建了接口B继承接口A,这是我关心的问题,一个接口是否可以继承另一个接口?为了继续我的更改,我然后将需要新枚举的类更改为实现接口B而不是接口A,因为它是由接口B继承的.我考虑在我的类中实现两个接口,但是我正在使用整个代码中的接口,并希望只使用一个接口来查看类,而不是两个.

我希望这很清楚(可能很长)但如果有人能给我一些建议,要么我做得对,要么我做错了请告诉我.

谢谢!

.net oop inheritance

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

61
推荐指数
3
解决办法
4万
查看次数

为什么std :: function不相等?

这个问题也适用于boost::functionstd::tr1::function.

std::function 不相等的平等:

#include <functional>
void foo() { }

int main() {
    std::function<void()> f(foo), g(foo);
    bool are_equal(f == g); // Error:  f and g are not equality comparable
}
Run Code Online (Sandbox Code Playgroud)

在C++ 11中,operator==operator!=重载并不存在.在早期的C++ 11草案中,使用注释(N3092§20.8.14.2)将重载声明为已删除:

// deleted overloads close possible hole in the type system
Run Code Online (Sandbox Code Playgroud)

它没有说明"类型系统中可能存在的漏洞"是什么.在TR1和Boost中,声明了重载但未定义.TR1规范评论(N1836§3.7.2.6):

这些成员函数应保持未定义.

[ 注意:类似布尔值的转换会打开一个漏洞,通过==或可以比较两个函数实例!=.这些未定义的void运算符会关闭漏洞并确保编译时错误.- 尾注 ]

我对"漏洞"的理解是,如果我们有bool转换函数,那么转换可以用于相等比较(以及其他情况):

struct S {
    operator bool() { return false; }
};

int main() { …
Run Code Online (Sandbox Code Playgroud)

c++ boost function tr1 c++11

61
推荐指数
4
解决办法
1万
查看次数

我们真的需要C++ 11中的"枚举类"吗?

我们的时候,

struct E { enum E_ { HELLO }; }; // 'E' is inheritable
Run Code Online (Sandbox Code Playgroud)

那我们为什么需要,

enum class E { HELLO };  // 'E' is not inheritable
Run Code Online (Sandbox Code Playgroud)

IMO第二版不提供比第一版更多的功能.我不认为这enum class只是为了节省2个花括号{};!我错过了任何重要方面吗?

作为未成年人的问题,是有什么区别enum classenum struct其他比语法(因为两者都具有public访问说明符)?

c++ enums language-lawyer c++11

60
推荐指数
4
解决办法
3万
查看次数

为什么有些人使用交换进行移动分配?

例如,stdlibc ++具有以下内容:

unique_lock& operator=(unique_lock&& __u)
{
    if(_M_owns)
        unlock();
    unique_lock(std::move(__u)).swap(*this);
    __u._M_device = 0;
    __u._M_owns = false;
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

为什么不直接将两个__成员分配给*?交换是否意味着__u被分配了*this成员,后来才分配0和false ...在这种情况下交换正在做不必要的工作.我错过了什么?(unique_lock :: swap只对每个成员执行std :: swap)

c++ rvalue-reference move-semantics copy-and-swap c++11

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

在不复制的情况下在C++ std :: vector和C数组之间进行转换

我希望能够在std :: vector和它的底层C数组int*之间进行转换,而无需显式复制数据.

std :: vector是否提供对底层C数组的访问?我正在寻找这样的东西

vector<int> v (4,100)
int* pv = v.c_array();
Run Code Online (Sandbox Code Playgroud)

编辑:

此外,是否可以进行相反的操作,即如何在std::vector不复制的情况下从C数组初始化?

int pv[4] = { 4, 4, 4, 4};
vector<int> v (pv);
Run Code Online (Sandbox Code Playgroud)

c c++ arrays stl stdvector

54
推荐指数
4
解决办法
5万
查看次数

如何支持IPv4和IPv6连接

我目前正在研究UDP套接字应用程序,我需要内置支持,以便IPV4和IPV6连接可以将数据包发送到服务器.

我希望有人可以帮助我,并指出我正确的方向; 我发现的大部分文档都不完整.如果你能指出Winsock和BSD套接字之间的任何差异,也会有所帮助.

提前致谢!

c++ sockets winsock ipv4 ipv6

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