小编0x4*_*2D2的帖子

为什么不从void函数模板返回编译器错误?

考虑:

void f() {
    return 5;
}
Run Code Online (Sandbox Code Playgroud)

以上会引起错误.但为什么不呢?:

template <typename = void> void f() {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在用gcc-4.5.1编译.为什么使用模板会产生差异,以至于我不会因为非模板函数执行相同的非法返回语句而收到错误?我得到的唯一挫折是我无法调用函数(即f())而没有得到:

error: return-statement with a value, in function returning 'void'

但是,我能够为void函数模板定义return语句的原因是什么?

这是我的代码:

template <typename = void> void f() {
    return 0;
}

// pass

int main() {



}
Run Code Online (Sandbox Code Playgroud)

尽管在返回void的函数中有一个非法的返回语句,上面的代码仍将通过.

c++ templates

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

未捕获的ReferenceError:未定义e

我想这样做:

$("#canvasDiv").mouseover(function() {
    var pageCoords = "( " + e.pageX + ", " + e.pageY + " )";
    var clientCoords = "( " + e.clientX + ", " + e.clientY + " )";
    $(".filler").text("( e.pageX, e.pageY ) : " + pageCoords);
    $(".filler").text("( e.clientX, e.clientY ) : " + clientCoords);
});
Run Code Online (Sandbox Code Playgroud)

在控制台中我得到了这个:

Uncaught ReferenceError: e is not defined

我不明白......我认为e应该是JavaScript已经设置的变量...帮助?

jquery

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

在javascript中提升

我之前问了一个问题,有人给我一个指南,我读了它,我看到了这个

  var temp = setTimeout,
  setTimeout = function() {};
Run Code Online (Sandbox Code Playgroud)

他说,由于JavaScript提升,temp将不确定,我不明白为什么不应该这样?

    var temp;
    temp = setTimeout;
    setTimeout = function() {};
Run Code Online (Sandbox Code Playgroud)

为什么它未定义?

javascript hoisting

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

如果使用'new'来实例化一个对象而不将其赋值给变量会发生什么?

想知道如果我写下以下内容并运行程序会发生什么.

new int[5]; // without assigning it to a pointer.
Run Code Online (Sandbox Code Playgroud)

汇编通过了.

但是会5 * sizeof(int)分配一大块内存吗?

如果它是一个对象怎么办?

new some_obj_[5]; // without assigning it to a pointer.
Run Code Online (Sandbox Code Playgroud)

是否会some_obj_调用构造函数?

c++ new-operator

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

奇怪的战俘(x,y); 行为

在做我的作业时,我注意到一些非常奇怪的东西,我无法弄清楚为什么.

int x = 5;
cout << pow(x, 2);
Run Code Online (Sandbox Code Playgroud)

结果是25.那没关系.但如果我写这样的程序:

int x = 5;
int y = pow(x, 2);
cout << y;
Run Code Online (Sandbox Code Playgroud)

结果是24!

当x为2,3,4,6,7,8没有问题,但是5,10,11,13等结果比它应该低1.

if()也是一样的.

for (int x = 1; x <= 20 ; x++) {
    if (x * x == pow(x, 2)) 
    cout << x << endl;
}
Run Code Online (Sandbox Code Playgroud)

它打印出数字1,2,3,4,6,8,12,16.

c++ pow

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

为什么这个time_zone_ptr示例不包含内存泄漏?

我正在阅读这里的boost DateTime库,其中包含许多示例,例如:

time_zone_ptr zone(new posix_time_zone("MST-07"));
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么使用关键字'new'不会导致内存泄漏?我调查了boost源代码,并注意到它有两个不同版本的构造函数,一个使用shared_ptr,另一个使用weak_ptr.有人可以解释一下这些是如何工作的,为什么上面这行可以安全写?

c++ timezone datetime boost weak-ptr

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

如何分别为整数和浮点类型专门设计模板函数?

考虑功能template<typename T> void Fun(T t);.我怎样才能分别为整数和浮点类型实现它的不同实现?

我猜积木是std::enable_if,std::is_integral,std::is_floating_point.但我不能以优雅的方式把它们放在一起:-(.

PS我有C++ 11可用.

c++ templates c++11

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

返回私人向量

我有一个带有私有属性的类,它是一个向量.做getter函数的最佳方法是什么?

  1. 返回整个向量: vector<char*> getNames() { return names; }
    • 这会返回副本还是指针?这是私人的吗?
  2. 返回迭代器: vector<char*>::iterator getNames() { return names.begin(); }
  3. 使矢量公开
    • 我知道这对于OOP来说是不好的做法,只是列出选项.

c++ oop iterator private vector

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

C++错误编译,因为私有成员

我的主要班级Task有私人会员:

private:
    Task();
Run Code Online (Sandbox Code Playgroud)

我添加了一个Scheduler带有类的herance的派生类Task:

class Scheduler : public Task {
    friend class Task;`
Run Code Online (Sandbox Code Playgroud)

我创建了一个文件Scheduler.cc来实现类派生的构造函数Scheduler:

Scheduler::Scheduler() {
    //nothing here.
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用构造函数编译为Scheduler空,但我收到一个编译错误,我不理解该关系,因为我的构造函数Scheduler是空白的:

/tmp/PROJETO/T1/booos-t1/lib/Task.h: In constructor ‘BOOOS::Scheduler::Scheduler()’: /tmp/PROJETO/T1/booos-t1/lib/Task.h:41:2: error: ‘BOOOS::Task::Task()’ is private Scheduler.cc:13:22: error: within this context make[1]: ** [Scheduler.o] Erro 1

我想了解我的问题,因为我不想在我的Scheduler构造函数中访问类Task的私有成员.

c++ scheduler

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

这不是真正的指针吗?

我正在阅读有关虚拟表的内容.说到指针__vptr,由作者说明

*this指针不同,指针实际上是编译器用来解析自引用的函数参数,它*__vptr是一个真正的指针.因此,它使每个类对象的分配大一个指针的大小.

这里的含义是什么,this实际上是一个函数参数?而this不是一个真正的指针?

c++ pointers this

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