小编Fro*_*art的帖子

#ifdef 指令末尾的额外标记

为什么下面的代码会编译?

#ifdef C++11
// ...
#endif

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

gcc 4.8.0 给了我以下警告:

#ifdef 指令末尾的额外标记

根据标准,宏名称只能包含字母、数字和下划线字符。

也许是因为这个?

ISO/IEC 14882:2011

16.1 条件包含 [cpp.cond]

6 按顺序检查每个指令的条件。如果它评估为假(零),则跳过它控制的组:指令仅通过确定指令的名称进行处理,以跟踪嵌套条件的级别;指令的其余预处理标记将被忽略,组中的其他预处理标记也将被忽略。仅处理其控制条件评估为真(非零)的第一组。如果所有条件的计算结果都不为真,并且存在 #else 指令,则处理由 #else 控制的组;缺少#else 指令,直到#endif 的所有组都被跳过。151

我无法正确理解这句话。

c c++

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

运算符删除和转换

我可以像下面的代码一样使用smth:

int main()
{
    int* foo = new int;
    double* bar = reinterpret_cast<double*>(foo);
    delete bar;
}
Run Code Online (Sandbox Code Playgroud)

是UB吗?

我认为我们只需要为operator new返回的指针调用operator delete,但是在这种情况下怎么样?

我认为它是UB,因为reinterpret_cast不会对结果指针提供任何保证.我对吗?

有人可以从标准中发布正确的报价吗?

c++

6
推荐指数
1
解决办法
158
查看次数

Visual Studio 2013中支持Windows XP和Windows Server 2003

在Visual Studio 2013中如何支持Windows XP和Windows Server 2003?我可以在Visual Studio 2013中为这些系统用C++编写程序吗?

c++ windows visual-studio visual-studio-2013

6
推荐指数
1
解决办法
8013
查看次数

Boost线程和try_join_for每次都给出不同的输出

假设我有以下代码:

#include <boost/chrono.hpp>
#include <boost/thread.hpp>

#include <iostream>

int main()
{
  boost::thread thd([]{ std::cout << "str \n"; });

  boost::this_thread::sleep_for(boost::chrono::seconds(3));

  if (thd.try_join_for(boost::chrono::nanoseconds(1)))
  {
    std::cout << "Finished \n";
  }
  else
  {
    std::cout << "Running \n";
  }
}
Run Code Online (Sandbox Code Playgroud)

每次启动该程序时,MSVC-12.0和boost 1.55都会为我提供不同的输出。例如,

str
Finished

str
Finished

str
Running
Run Code Online (Sandbox Code Playgroud)

当我将boost :: chrono :: nanoseconds更改为boost :: chrono :: microseconds时,输出看起来像预期的那样。

为什么?我究竟做错了什么?这是Boost库中的错误吗?Boost Bug Tracker中是否有入场券?

提前致谢。

c++ boost boost-thread

6
推荐指数
1
解决办法
3717
查看次数

为什么导入并不总是导入嵌套包?

为什么第一个代码不起作用,而第二个代码呢?

第一个代码:

import selenium

driver = selenium.webdriver.Firefox()
Run Code Online (Sandbox Code Playgroud)

AttributeError:'module'对象没有属性'webdriver'

第二个代码:

from selenium import webdriver

driver = webdriver.Firefox()
Run Code Online (Sandbox Code Playgroud)

python python-2.x python-2.7

6
推荐指数
1
解决办法
106
查看次数

C和C++中的宏重新定义

我知道这段代码在C和C++中都是有效的:

#define FOO 0
#define FOO 0
Run Code Online (Sandbox Code Playgroud)

ISO/IEC 14882:2011

16.3宏替换[cpp.replace]

2当前定义为类似对象的宏的标识符可以由另一个#define预处理指令重新定义,前提是第二个定义是类似于对象的宏定义,并且两个替换列表相同,否则程序格式不正确.同样,当前定义为类似函数的宏的标识符可以由另一个#define预处理指令重新定义,前提是第二个定义是具有相同数量和参数拼写的类函数宏定义,并且两个替换列表相同,否则该计划是不正确的.

但是这段代码怎么样?

#define FOO 0
#define FOO FOO
Run Code Online (Sandbox Code Playgroud)

替换列表在预处理开始时不相同(仅在第一次替换发生时).

c c++

5
推荐指数
1
解决办法
610
查看次数

将std :: ios_base :: trunc标志与std :: ios_base :: out一起使用的目的是什么

使用std::ios_base::trunc标志的目的是什么std::ios_base::out?我在很多例子中都看过这个.

我认为标准std::ios_base::out也保证了截断文件(以及我知道的所有STL实现).我错了,应该明确通知我要截断文件?

c++

5
推荐指数
2
解决办法
2306
查看次数

如何摆脱手动类模板参数规范

是否有Finalizer比这更通用的方法来编写一个类?

#include <functional>
#include <iostream>

template <typename T>
class Finalizer
{
public:
    Finalizer(const std::function<T>& f) : _f(f) {}

    ~Finalizer()
    {
        _f();
    }

private:
    std::function<T> _f;
};

int main()
{
    Finalizer<void()> finalizer([]() { std::cout << "str" << std::endl; });
}
Run Code Online (Sandbox Code Playgroud)

我想摆脱手动类模板参数规范,以便能够编写如下代码:

Finalizer finalizer([]() { std::cout << "str" << std::endl; });
Run Code Online (Sandbox Code Playgroud)

可能吗?

c++ lambda c++11

5
推荐指数
1
解决办法
144
查看次数

在删除之前将注入JS代码完成

是否保证此代码

function runEmbeddedJSInPageEnvironment(code) {
  var e = document.createElement('script');
  e.type = 'text/javascript';
  e.appendChild(document.createTextNode(code));
  (document.head || document.documentElement).appendChild(e);
  e.parentNode.removeChild(e);
}

runEmbeddedJSInPageEnvironment("$('#someform').off('submit');");
Run Code Online (Sandbox Code Playgroud)

将等待传递给的代码runEmbeddedJSInPageEnvironment先完成,然后通过调用removeChild函数将其从页面中删除?

或者可以在此代码执行完毕之前将其删除?

html javascript

5
推荐指数
1
解决办法
155
查看次数

我需要在头文件和源文件中指定调用约定吗

我需要在头文件和源文件中指定调用约定吗?

例如,

头文件.h

void __cdecl Foo();
Run Code Online (Sandbox Code Playgroud)

源代码.cpp

void __cdecl Foo()
{
}
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++ language-lawyer

5
推荐指数
1
解决办法
518
查看次数