小编msc*_*msc的帖子

在C++ 11中std :: nearbyint vs std :: round

C++ 11引入了std :: nearbyintstd :: round函数.两者都返回"最接近的"整数值.

我应该何时何地更喜欢一个?

我用以下值测试了它们0.5:

案例1:附近的演示

#include <iostream>
#include <cmath>

int main()
{
    std::cout<<"nearbyint(0.5) = "<<std::nearbyint(0.5);
}
Run Code Online (Sandbox Code Playgroud)

输出: 0

案例2: 圆形演示

#include <iostream>
#include <cmath>

int main()
{
    std::cout<<"round(0.5) = "<<std::round(0.5);
}
Run Code Online (Sandbox Code Playgroud)

输出: 1

为什么输出不同?

c++ floating-point rounding c++11

11
推荐指数
2
解决办法
4605
查看次数

为下标运算符和函数调用运算符提供默认参数

在下面的代码中,我为数组下标运算符提供了默认参数.

struct st 
{
    int operator[](int x = 0)
    {
        // code here
    }
};
Run Code Online (Sandbox Code Playgroud)

但是,编译器生成了一个错误:

error: 'int st::operator[](int)' cannot have default arguments
     int operator[](int x = 0)
Run Code Online (Sandbox Code Playgroud)

但是,如果我为函数调用运算符提供默认参数.

struct st 
{
    int operator()(int x = 0)
    {
        // code here
    }
};
Run Code Online (Sandbox Code Playgroud)

它工作正常.

所以,我有一个问题:

  • 为什么不允许数组下标运算符的默认参数?
  • 为什么允许函数调用运算符的默认参数?

c++ operator-overloading operators language-lawyer default-arguments

11
推荐指数
2
解决办法
1082
查看次数

class的目的= C++中的void?

class = void以下代码片段的目的是什么?

template< class, class = void >
struct has_type_member : false_type { };
template< class T >
struct has_type_member<T, void_t<typename T::type>> : true_type { };
Run Code Online (Sandbox Code Playgroud)

c++ templates void c++11 c++14

10
推荐指数
1
解决办法
956
查看次数

C++中的模板引用参数推导失败

为什么以下代码无法在C++ 14编译器中编译?如果我使用

const int i = 10;
int n = fun(i);
Run Code Online (Sandbox Code Playgroud)

编译器出错.

但是,如果我使用

int n = fun(10);
Run Code Online (Sandbox Code Playgroud)

而不是上述陈述,它工作正常.

例:

template<typename T>
int fun(const T&&)
{
    cout<<"fun"<<endl;
}

int main()
{
 // int i = 10;         // Not work
    const int i = 10;   // Not work
    int n = fun(i);  
 // int n = fun(10);    // Working fine
}
Run Code Online (Sandbox Code Playgroud)

c++ templates const c++14

10
推荐指数
1
解决办法
461
查看次数

Linux内核模块 - 创建proc文件 - proc_root未声明的错误

我复制并粘贴此URL中的代码,用于使用内核模块创建和读取/写入proc文件,并获取proc_root未声明的错误.同样的例子是在几个网站上,所以我认为它的工作原理.有什么想法我会收到这个错误吗?我的makefile需要不同的东西吗?下面是我的makefile:

基本proc文件创建的示例代码(直接复制和粘贴以完成初始测试):http: //tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN769

我正在使用的Makefile:

obj-m    := counter.o

KDIR    := /MY/LINUX/SRC

PWD    := $(shell pwd)

default:
 $(MAKE) ARCH=um -C $(KDIR) SUBDIRS=$(PWD) modules
Run Code Online (Sandbox Code Playgroud)

kernel kernel-module linux-kernel

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

什么时候使用gcc标志-nostartfiles?

我似乎无法弄清楚国旗的目的-nostartfiles.它可以防止main()被立即调用,通常你也可以指定程序入口点.但是,为什么我要这样做呢?我编写了一个需要它的内核,因为一切都由我来开始,但除此之外,是否有非操作系统的理由来指定不同的程序入口点?

gcc

9
推荐指数
1
解决办法
3832
查看次数

"(void*)"的含义是什么:if(test ==(void*)-1)

该函数返回-1.

但是,(void*)以下代码的含义是什么:

没有它可以工作吗?

test = shmat(shm_id, NULL, 0);

if (test == (void *)-1) {
    /* handle shmat failure */
}
Run Code Online (Sandbox Code Playgroud)

c posix ipc

9
推荐指数
1
解决办法
1018
查看次数

GCC:Unscoped枚举类型给出了歧义错误

在下面的代码中,我定义了一个带有类型的unscoped枚举long long.这个程序在Clang上工作正常.

GCC编译器给出了模糊错误.

#include <iostream>

enum : long long { Var=5 };

void fun(long long ll)
{
    std::cout << "long long : " << ll << std::endl;
}

void fun(int i)
{
    std::cout << "int : " << i <<  std::endl;
}

int main()
{
    fun(Var);
}
Run Code Online (Sandbox Code Playgroud)

GCC生成错误:

main.cpp: In function 'int main()':
main.cpp:17:12: error: call of overloaded 'fun(<unnamed enum>)' is ambiguous
     fun(Var);
            ^
main.cpp:5:6: note: candidate: void fun(long long int)
 void fun(long …
Run Code Online (Sandbox Code Playgroud)

c++ enums gcc language-lawyer c++14

9
推荐指数
1
解决办法
258
查看次数

为什么不能将Base类对象分配给Derived类对象?

派生类对象可以被分配到一个基类对象在C++中.

Derived d;
Base b = d; // It's Ok
Run Code Online (Sandbox Code Playgroud)

但为什么不能将基类对象分配给派生类对象

Base b;
Derived d = b; //Not Ok. Compiler give an error
Run Code Online (Sandbox Code Playgroud)

编辑:

对不起,这个问题实际上是在面试时提出来的.

c++ inheritance object derived-class c++11

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

C指针的"**&ptr"和"2**ptr"是什么意思?

我是C的新手.我需要通过以下代码了解屏幕上打印的每个值的含义:

#include<stdio.h>

int main() 
{
     int x = 10;
     int *ptr = &x;
     printf("%d %d %d\n", *ptr,**&ptr, 2**ptr);
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出(GCC):

10 10 20
Run Code Online (Sandbox Code Playgroud)

在这里,我声明了变量xptr指向x变量.所以,*ptr印刷价值x.但我不明白的价值**&ptr2**ptr.

提前致谢.

c pointers reference dereference

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