所以我有一个清单:
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)
?
我刚刚被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
当我尝试编译此代码(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) 我似乎无法找到答案,只是想确保它是一个好的编码标准.我有接口A,它被许多不同的类使用,并且不希望接口A发生变化.我遇到了一个新的需求,它要求许多实现接口A的类需要枚举,但并不是所有的类都需要这个枚举.我不希望不需要这个新枚举的类来实现这个新功能.所以我创建了包含我需要添加的新枚举的接口B. 然后我创建了接口B继承接口A,这是我关心的问题,一个接口是否可以继承另一个接口?为了继续我的更改,我然后将需要新枚举的类更改为实现接口B而不是接口A,因为它是由接口B继承的.我考虑在我的类中实现两个接口,但是我正在使用整个代码中的接口,并希望只使用一个接口来查看类,而不是两个.
我希望这很清楚(可能很长)但如果有人能给我一些建议,要么我做得对,要么我做错了请告诉我.
谢谢!
海湾合作委员会有一份清单 ; 是否有类似的Visual Studio 2010列表?
这个问题也适用于boost::function和std::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) 我们的时候,
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 class和enum struct其他比语法(因为两者都具有public访问说明符)?
例如,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)
我希望能够在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) 我目前正在研究UDP套接字应用程序,我需要内置支持,以便IPV4和IPV6连接可以将数据包发送到服务器.
我希望有人可以帮助我,并指出我正确的方向; 我发现的大部分文档都不完整.如果你能指出Winsock和BSD套接字之间的任何差异,也会有所帮助.
提前致谢!