小编Bau*_*gen的帖子

如何将std :: string_view转换为const char*?

使用带有标志的gcc-7.1进行编译时-std=c++17,以下程序会引发错误:

#include <string_view>
void foo(const char* cstr) {}
void bar(std::string_view str){
    foo(str);
}
Run Code Online (Sandbox Code Playgroud)

错误消息是

In function 'void bar(std::string_view)':
error: cannot convert 'std::string_view {aka std::basic_string_view<char>}' to 'const char*' for argument '1' to 'void foo(const char*)'
 foo(str);
Run Code Online (Sandbox Code Playgroud)

我很惊讶没有转换,const char*因为其他库(abseil,bde)提供了string_view隐式转换为的类似类const char*.

c++ string string-view c++17

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

最佳XSLT编辑器和| 调试器

除了Visual Studio之外,您最好创建,编辑,维护和调试XSLT文件的工具是什么?

我在一个相当大的项目上工作,我们有大量的XSLT文件,并且它们的实现变得非常复杂.

这种语言似乎很脆弱.能够更快地导航和识别错误会很好.

xslt debugging editor

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

我可以使用file_get_contents()来比较两个文件吗?

我想同步两个目录.我使用file_get_contents($ source)=== file_get_contents($ dest)来比较两个文件.这样做有什么问题吗?

php

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

Visual Studio项目已过期

我一直在努力让Visual C++工作,但是在构建每个项目时我都遇到了这个错误:"这个项目已经过时了""你想构建它吗?" 它每次都无法建立.

当我重建时,构建仍然失败,虽然在记录器中我没有注意到任何错误消息,这使我认为它没有正确记录(我正在使用第三方程序进行记录).

我在这里遵循了一些说明:http://blogs.msdn.com/b/vsproject/archive/2009/07/21/enable-c-project-system-logging.aspx并启用了日志记录.

我收到此错误:项目不是最新的,因为"在此处插入文件名".lastbuildstate缺失.请注意,在实际的visual studio中,没有任何记录.我无法在谷歌上找到任何相关内容.可能是我错误地启用了日志记录,但我觉得这是错误.

c++ visual-studio-2010 visual-studio visual-c++

20
推荐指数
3
解决办法
6万
查看次数

为什么我必须为用户定义的文字使用long double?

以下用户定义的文字省略了错误:

constexpr double operator "" _kg(double q)
{
   return q*1000;
}
Run Code Online (Sandbox Code Playgroud)

但如果long添加,错误将消失,代码将按如下方式工作:

constexpr double operator "" _kg(long double q)
{
   return q*1000;
}
Run Code Online (Sandbox Code Playgroud)

错误是:

‘constexpr double operator""_kg(double)’ has invalid argument list
Run Code Online (Sandbox Code Playgroud)

这个问题只能由参数和返回类型可以是引起doublelong.

为什么long需要?

c++ user-defined-literals c++11

19
推荐指数
1
解决办法
1989
查看次数

在继承自std :: variant的类上使用std :: visit - libstdc ++ vs libc ++

请考虑以下代码段:

struct v : std::variant<int, std::vector<v>> { };

int main()
{
    std::visit([](auto){ }, v{0});
}
Run Code Online (Sandbox Code Playgroud)
  • clang ++ 7用-stdlib=libc++ -std=c++2a编译代码;

  • g ++ 9 -std=c++2a无法编译代码,出现以下错误:

    /opt/compiler-explorer/gcc-trunk-20180711/include/c++/9.0.0/variant:94:29:错误:嵌套名称说明符中使用的不完整类型'std :: variant_size'

     inline constexpr size_t variant_size_v = variant_size<_Variant>::value;
    
                             ^~~~~~~~~~~~~~
    
    Run Code Online (Sandbox Code Playgroud)

godbolt.org上的实例


  • 两种实现都符合标准吗?

  • 如果没有,这里的实施是正确的,为什么?

c++ variant language-lawyer c++17

19
推荐指数
2
解决办法
1166
查看次数

abs和fabs有什么区别?

我在这里检查了absfabspython 之间的区别

据我所知,速度和传递的类型有一些不同,但我的问题与VS上的原生c ++有关

关于VS我尝试了以下内容Visual Studio 2013 (v120):

float f1= abs(-9.2); // f = 9.2
float f2= fabs(-9); // Compile error [*]
Run Code Online (Sandbox Code Playgroud)

所以fabs(-9)它会给我一个编译器错误,但是当我尝试执行以下操作时:

double i = -9;
float f2= fabs(i); // This will work fine
Run Code Online (Sandbox Code Playgroud)

我从第一个代码中理解它不会编译因为fabs(-9)需要一个double,并且编译器无法将-9转换为-9.0,但在第二个代码中编译器将在编译时转换i=-9i=-9.0所以fabs(i)将正常工作.

有更好的解释吗?

另一件事,为什么编译器不能fabs(-9)像在c#中那样自动接受 并将int值转换为double?

[*]:

Error: more than one instance of overloaded function "fabs" matches the argument list:
        function "fabs(double _X)"
        function "fabs(float _X)"
        function …
Run Code Online (Sandbox Code Playgroud)

c++ cmath visual-studio-2013

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

我可以删除[]一个指向已分配数组的指针,但不能删除它的开头吗?

我特别想知道以下情况(我在一些代码中发现了我必须使用的情况):

SomeClass *ar = new SomeClass[2];
ar++;
delete[] ar;
Run Code Online (Sandbox Code Playgroud)

这段代码似乎运行正常 - 即没有崩溃(win32,使用VS2005构建).

这是"合法的"吗?当然感觉不对.

c++

17
推荐指数
4
解决办法
1786
查看次数

最简洁的方法来禁用复制和移动语义

以下肯定有效,但非常繁琐:

T(const T&) = delete;
T(T&&) = delete;
T& operator=(const T&) = delete;
T& operator=(T&&) = delete;
Run Code Online (Sandbox Code Playgroud)

我正试图发现最简洁的方式.以下工作会吗?

T& operator=(T) = delete;
Run Code Online (Sandbox Code Playgroud)

更新

请注意,我选择T& operator=(T)而不是T& operator=(const T&)T& operator=(T&&),因为它可以同时满足两个目的.

c++ copy move-semantics c++11

17
推荐指数
3
解决办法
2944
查看次数

为什么模板类允许无法编译的成员函数?

class P
{
};

template< typename P >
class C : public P
{
  public:
  void f()
  {
    P::f();
  }
};

int main() {
  C<P> c1;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

为了防止我的问题留下任何误解的空间,这是一个代码示例.如果C没有模板,但是从继承P直接,那么样品将无法编译,因为明确的功能f()试图呼吁基类的功能P是不存在的.

但是如果C是模板化的话,那么只有在f()实际调用时才会被拾取.

我想知道为什么会有这种差异.在这两种情况下f()都是死代码并且无论如何都会被剥离,但程序在非模板场景中是不正确的.

c++ templates

16
推荐指数
3
解决办法
990
查看次数