小编Tre*_*key的帖子

通用引用和转发引用之间有区别吗?

此函数的参数将绑定到右值引用:

void f(int && i);
Run Code Online (Sandbox Code Playgroud)

但是,此函数的参数将绑定到右值或左值引用:

template <typename T>  
void f(T && t);
Run Code Online (Sandbox Code Playgroud)

我经常听到这被称为通用参考.
我也听说它被称为转发参考.
他们的意思是一样的吗?
如果函数体调用,它只是转发引用std::forward吗?

c++ templates perfect-forwarding universal-reference forwarding-reference

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

如何避免非构造函数的隐式转换?

如何避免对非构造函数进行隐式转换?
我有一个函数,它接受一个整数作为参数,
但该函数也将采用字符,bools和long.
我相信它是通过隐式地施放它来实现的.
如何避免这种情况,以便函数只接受匹配类型的参数,否则将拒绝编译?
有一个关键字"显式"但它不适用于非构造函数.:\
我该怎么办?

以下程序编译,虽然我不喜欢:

#include <cstdlib>

//the function signature requires an int
void function(int i);

int main(){

    int i{5};
    function(i); //<- this is acceptable

    char c{'a'};
    function(c); //<- I would NOT like this to compile

    return EXIT_SUCCESS;
}

void function(int i){return;}
Run Code Online (Sandbox Code Playgroud)

*请务必指出任何滥用术语和假设的行为

c++ casting function implicit-cast implicit-conversion

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

如何在C++中模拟解构?

在JavaScript ES6中,有一种称为解构的语言功能.它也存在于许多其他语言中.

在JavaScript ES6中,它看起来像这样:

var animal = {
    species: 'dog',
    weight: 23,
    sound: 'woof'
}

//Destructuring
var {species, sound} = animal

//The dog says woof!
console.log('The ' + species + ' says ' + sound + '!')
Run Code Online (Sandbox Code Playgroud)

我可以在C++中做些什么来获得类似的语法并模拟这种功能?

javascript c++ language-construct destructuring c++17

35
推荐指数
3
解决办法
5548
查看次数

我还应该使用#include guards和#pragma一次吗?

在此输入图像描述

http://en.wikipedia.org/wiki/Pragma_once
当所有这些编译器都支持时,我还应该使用包含保护#pragma once吗?
很多关于堆栈溢出的响应都表示要使用它们兼容,但我不确定它是否仍然是真的.今天哪些编译器不支持#pragma once

我不确定在它成为widley之前使用两者是否只是一个推荐,或者是否仍然有很好的理由使用这两种方法.
什么时候只使用#pragma once会导致问题的例子?

c++ compiler-construction pragma include-guards

34
推荐指数
3
解决办法
5557
查看次数

std :: cin.getline()与std :: cin

什么时候应该std::cin.getline()使用?它有什么不同std::cin

c++ cin getline

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

C++中15种类型的分类是什么?

在Walter E. Brown 的CppCon2014会议演讲中,他表示该标准描述了C++中有15种类型的分类.

"C++类型的15个分区."
" 无效就是其中之一." - Walter E. Brown.

其他14个是什么?


在挖掘标准时,我发现了以下内容:

// 20.11.4.1
primary type categories:
template <class T> struct is_void;
template <class T> struct is_integral;
template <class T> struct is_floating_point;
template <class T> struct is_array;
template <class T> struct is_pointer;
template <class T> struct is_lvalue_reference;
template <class T> struct is_rvalue_reference;
template <class T> struct is_member_object_pointer;
template <class T> struct is_member_function_pointer;
template <class T> struct is_enum;
template <class T> struct is_union; …
Run Code Online (Sandbox Code Playgroud)

c++ types classification categories c++11

30
推荐指数
1
解决办法
1946
查看次数

mt-gd和mt-s库之间的区别是什么

在boost中,有两种类型的lib,一种是以#结尾mt-gd,另一种是以mt-s.这两者有什么区别?

boost

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

Boost链接器错误:未解析的外部符号"class boost :: system :: error_category const&__cdecl boost :: system :: get_system_category(void)"

我刚刚第一次开始使用Boost,详情如下:

  1. 我正在使用Visual Studio 2008 SP1
  2. 我在做x64 Build
  3. 我只使用boost :: asio(以及它拥有的任何依赖项)

我的代码现在编译了,我将我的项目指向了boost库(在构建了x64库之后)并且解决了过去的简单问题,现在我遇到了一个链接器错误:

2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)" (?get_system_category@system@boost@@YAAEBVerror_category@12@XZ)
2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_generic_category(void)" (?get_generic_category@system@boost@@YAAEBVerror_category@12@XZ)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?


我添加了这个定义:#define BOOST_LIB_DIAGNOSTIC

现在在我的输出中我看到了这个:

1>Linking to lib file: libboost_system-vc90-mt-1_38.lib
1>Linking to lib file: libboost_date_time-vc90-mt-1_38.lib
1>Linking to lib file: libboost_regex-vc90-mt-1_38.lib
Run Code Online (Sandbox Code Playgroud)

这似乎表明它是系统库中的实际链接.

c++ windows 64-bit boost-asio

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

命令行解析:Commons CLI替代方案?

对于Java中的命令行解析,我通常使用Apache Commons CLI.任何人都可以推荐任何替代库吗?

java command-line

27
推荐指数
3
解决办法
1万
查看次数

C和C++中的静态和外部全局变量

我做了2个项目,第一个用C语言,第二个用C++编写,两个项目都有相同的行为.

C项目:

header.h

int varGlobal=7;
Run Code Online (Sandbox Code Playgroud)

main.c中

#include <stdio.h>
#include <stdlib.h>
#include "header.h"

void function(int i)
{
    static int a=0;
    a++;
    int t=i;
    i=varGlobal;
    varGlobal=t;
    printf("Call #%d:\ni=%d\nvarGlobal=%d\n\n",a,i,varGlobal,t);
}

int main() {
    function(4);
    function(6);
    function(12);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

C++项目:

header.h

int varGlobal=7;
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include <iostream>
#include "header.h"
using namespace std;

void function(int i)
{
    static int a=0;
    int t=i;
    a++;
    i=varGlobal;
    varGlobal=t;
    cout<<"Call #"<<a<<":"<<endl<<"i="<<i<<endl<<"varGlobal="<<varGlobal<<endl<<endl; 
}

int main() {
    function(4);
    function(6);
    function(12);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我读到默认情况下全局变量是extern,在C++中默认是C和static ; 那么为什么C++代码有效呢?

我的意思是int …

c c++ static global-variables extern

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